From 43396ec10a3386c203df9a68f2c97447de6557d6 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Fri, 25 Sep 2026 22:17:08 +0900 Subject: [PATCH 01/14] =?UTF-8?q?feat:=20HTElement=20=E3=81=A8=20HTChemica?= =?UTF-8?q?l=20=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/data/RagiumDataGen.kt | 4 + .../data/lang/RagiumEnglishLangProvider.kt | 8 +- .../data/lang/RagiumJapaneseLangProvider.kt | 8 +- .../data/ragium/ragium/chemical/alumina.json | 13 +++ .../data/ragium/ragium/chemical/aluminum.json | 4 + .../data/ragium/ragium/chemical/carbon.json | 4 + .../data/ragium/ragium/chemical/chlorine.json | 5 + .../data/ragium/ragium/chemical/diamond.json | 4 + .../data/ragium/ragium/chemical/hydrogen.json | 5 + .../data/ragium/ragium/chemical/nitrogen.json | 5 + .../data/ragium/ragium/chemical/oxygen.json | 5 + .../data/ragium/ragium/chemical/silicon.json | 4 + .../data/ragium/ragium/chemical/sulfur.json | 4 + .../data/ragium/ragium/element/aluminum.json | 3 + .../data/ragium/ragium/element/carbon.json | 3 + .../data/ragium/ragium/element/chlorine.json | 3 + .../data/ragium/ragium/element/fluorine.json | 3 + .../data/ragium/ragium/element/hydrogen.json | 3 + .../data/ragium/ragium/element/nitrogen.json | 3 + .../data/ragium/ragium/element/oxygen.json | 3 + .../data/ragium/ragium/element/silicon.json | 3 + .../data/ragium/ragium/element/sodium.json | 3 + .../data/ragium/ragium/element/sulfur.json | 3 + src/lib/kotlin/hiiragi283/lib/HTConstants.kt | 3 + .../lib/data/lang/HTLangProvider.kt | 26 +++-- .../hiiragi283/ragium/api/RagiumRegistries.kt | 38 ++++++ .../ragium/api/data/RagiumDataComponents.kt | 9 +- .../ragium/api/data/chemical/HTChemical.kt | 64 ++++++++++ .../api/data/chemical/HTCompoundChemical.kt | 109 ++++++++++++++++++ .../api/data/chemical/HTSimpleChemical.kt | 44 +++++++ .../api/data/chemical/RagiumChemicals.kt | 89 ++++++++++++++ .../ragium/api/data/element/HTElement.kt | 43 +++++++ .../ragium/api/data/element/RagiumElements.kt | 73 ++++++++++++ .../ragium/api/material/RagiumMaterial.kt | 61 +++++++--- .../kotlin/hiiragi283/ragium/common/Ragium.kt | 7 ++ .../ragium/common/item/RagiumItems.kt | 56 ++++++--- 36 files changed, 673 insertions(+), 52 deletions(-) create mode 100644 src/generated/resources/data/ragium/ragium/chemical/alumina.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/aluminum.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/carbon.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/chlorine.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/diamond.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/hydrogen.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/nitrogen.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/oxygen.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/silicon.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/sulfur.json create mode 100644 src/generated/resources/data/ragium/ragium/element/aluminum.json create mode 100644 src/generated/resources/data/ragium/ragium/element/carbon.json create mode 100644 src/generated/resources/data/ragium/ragium/element/chlorine.json create mode 100644 src/generated/resources/data/ragium/ragium/element/fluorine.json create mode 100644 src/generated/resources/data/ragium/ragium/element/hydrogen.json create mode 100644 src/generated/resources/data/ragium/ragium/element/nitrogen.json create mode 100644 src/generated/resources/data/ragium/ragium/element/oxygen.json create mode 100644 src/generated/resources/data/ragium/ragium/element/silicon.json create mode 100644 src/generated/resources/data/ragium/ragium/element/sodium.json create mode 100644 src/generated/resources/data/ragium/ragium/element/sulfur.json create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTChemical.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTCompoundChemical.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTSimpleChemical.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/data/element/HTElement.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt index c6559c80a..f8f11c48e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt @@ -2,6 +2,8 @@ package hiiragi283.ragium.data import hiiragi283.lib.data.createLootTables import hiiragi283.ragium.api.RagiumRegistries +import hiiragi283.ragium.api.data.chemical.RagiumChemicals +import hiiragi283.ragium.api.data.element.RagiumElements import hiiragi283.ragium.api.data.oreSlurry.RagiumOreSlurryData import hiiragi283.ragium.api.world.RagiumDamageTypes import hiiragi283.ragium.data.advancement.RagiumAdvancementProvider @@ -39,6 +41,8 @@ data object RagiumDataGen { event.createDatapackRegistryObjects( RegistrySetBuilder() .add(Registries.DAMAGE_TYPE, RagiumDamageTypes::bootstrap) + .add(RagiumRegistries.Keys.ELEMENT, RagiumElements::bootstrap) + .add(RagiumRegistries.Keys.CHEMICAL, RagiumChemicals::bootstrap) .add(RagiumRegistries.Keys.ORE_SLURRY_DATA, RagiumOreSlurryData::bootstrap) .apply(RagiumWorldData::bootstrap) ) diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 30609fcef..70afb0f4e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -147,10 +147,10 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumMobEffects.CHEMICAL_BURN, "Chemical Burn") // Ore Slurry - addOreSlurry(RagiumOreSlurryData.COPPER, "Copper Ore Slurry") - addOreSlurry(RagiumOreSlurryData.IRON, "Iron Ore Slurry") - addOreSlurry(RagiumOreSlurryData.GOLD, "Gold Ore Slurry") - addOreSlurry(RagiumOreSlurryData.NETHERITE_SCRAP, "Ancient Debris Slurry") + addFromKey(RagiumOreSlurryData.COPPER, "Copper Ore Slurry") + addFromKey(RagiumOreSlurryData.IRON, "Iron Ore Slurry") + addFromKey(RagiumOreSlurryData.GOLD, "Gold Ore Slurry") + addFromKey(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 1eaf4c120..258880ab3 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -143,10 +143,10 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumMobEffects.CHEMICAL_BURN, "化学火傷") // Ore Slurry - addOreSlurry(RagiumOreSlurryData.COPPER, "銅の鉱石泥") - addOreSlurry(RagiumOreSlurryData.IRON, "鉄の鉱石泥") - addOreSlurry(RagiumOreSlurryData.GOLD, "金の鉱石泥") - addOreSlurry(RagiumOreSlurryData.NETHERITE_SCRAP, "古代の鉱石泥") + addFromKey(RagiumOreSlurryData.COPPER, "銅の鉱石泥") + addFromKey(RagiumOreSlurryData.IRON, "鉄の鉱石泥") + addFromKey(RagiumOreSlurryData.GOLD, "金の鉱石泥") + addFromKey(RagiumOreSlurryData.NETHERITE_SCRAP, "古代の鉱石泥") // Potion addPotion(RagiumPotions.FROSTBITE, "凍傷") diff --git a/src/generated/resources/data/ragium/ragium/chemical/alumina.json b/src/generated/resources/data/ragium/ragium/chemical/alumina.json new file mode 100644 index 000000000..1b6ef7a3f --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/alumina.json @@ -0,0 +1,13 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:aluminum", + "weight": 2 + }, + { + "element": "ragium:oxygen", + "weight": 3 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/aluminum.json b/src/generated/resources/data/ragium/ragium/chemical/aluminum.json new file mode 100644 index 000000000..9906ab68d --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/aluminum.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:aluminum" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/carbon.json b/src/generated/resources/data/ragium/ragium/chemical/carbon.json new file mode 100644 index 000000000..ddb636aff --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/carbon.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:carbon" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/chlorine.json b/src/generated/resources/data/ragium/ragium/chemical/chlorine.json new file mode 100644 index 000000000..a6de7fe91 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/chlorine.json @@ -0,0 +1,5 @@ +{ + "type": "ragium:simple", + "element": "ragium:chlorine", + "weight": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/diamond.json b/src/generated/resources/data/ragium/ragium/chemical/diamond.json new file mode 100644 index 000000000..ddb636aff --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/diamond.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:carbon" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/hydrogen.json b/src/generated/resources/data/ragium/ragium/chemical/hydrogen.json new file mode 100644 index 000000000..fa11358a9 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/hydrogen.json @@ -0,0 +1,5 @@ +{ + "type": "ragium:simple", + "element": "ragium:hydrogen", + "weight": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/nitrogen.json b/src/generated/resources/data/ragium/ragium/chemical/nitrogen.json new file mode 100644 index 000000000..5edf8e564 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/nitrogen.json @@ -0,0 +1,5 @@ +{ + "type": "ragium:simple", + "element": "ragium:nitrogen", + "weight": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/oxygen.json b/src/generated/resources/data/ragium/ragium/chemical/oxygen.json new file mode 100644 index 000000000..502fb04d7 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/oxygen.json @@ -0,0 +1,5 @@ +{ + "type": "ragium:simple", + "element": "ragium:oxygen", + "weight": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/silicon.json b/src/generated/resources/data/ragium/ragium/chemical/silicon.json new file mode 100644 index 000000000..43370cd44 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/silicon.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:silicon" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sulfur.json b/src/generated/resources/data/ragium/ragium/chemical/sulfur.json new file mode 100644 index 000000000..7ef322fe2 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sulfur.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:sulfur" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/aluminum.json b/src/generated/resources/data/ragium/ragium/element/aluminum.json new file mode 100644 index 000000000..924ba5d97 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/aluminum.json @@ -0,0 +1,3 @@ +{ + "symbol": "Al" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/carbon.json b/src/generated/resources/data/ragium/ragium/element/carbon.json new file mode 100644 index 000000000..109c0c317 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/carbon.json @@ -0,0 +1,3 @@ +{ + "symbol": "C" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/chlorine.json b/src/generated/resources/data/ragium/ragium/element/chlorine.json new file mode 100644 index 000000000..74ee59107 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/chlorine.json @@ -0,0 +1,3 @@ +{ + "symbol": "Cl" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/fluorine.json b/src/generated/resources/data/ragium/ragium/element/fluorine.json new file mode 100644 index 000000000..47844d253 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/fluorine.json @@ -0,0 +1,3 @@ +{ + "symbol": "F" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/hydrogen.json b/src/generated/resources/data/ragium/ragium/element/hydrogen.json new file mode 100644 index 000000000..a7fb573d7 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/hydrogen.json @@ -0,0 +1,3 @@ +{ + "symbol": "H" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/nitrogen.json b/src/generated/resources/data/ragium/ragium/element/nitrogen.json new file mode 100644 index 000000000..14297777a --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/nitrogen.json @@ -0,0 +1,3 @@ +{ + "symbol": "N" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/oxygen.json b/src/generated/resources/data/ragium/ragium/element/oxygen.json new file mode 100644 index 000000000..152cab0aa --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/oxygen.json @@ -0,0 +1,3 @@ +{ + "symbol": "O" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/silicon.json b/src/generated/resources/data/ragium/ragium/element/silicon.json new file mode 100644 index 000000000..0ecb3ca49 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/silicon.json @@ -0,0 +1,3 @@ +{ + "symbol": "Si" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/sodium.json b/src/generated/resources/data/ragium/ragium/element/sodium.json new file mode 100644 index 000000000..351330585 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/sodium.json @@ -0,0 +1,3 @@ +{ + "symbol": "Na" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/sulfur.json b/src/generated/resources/data/ragium/ragium/element/sulfur.json new file mode 100644 index 000000000..70629b6e5 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/sulfur.json @@ -0,0 +1,3 @@ +{ + "symbol": "S" +} \ No newline at end of file diff --git a/src/lib/kotlin/hiiragi283/lib/HTConstants.kt b/src/lib/kotlin/hiiragi283/lib/HTConstants.kt index e1532670a..311b5adae 100644 --- a/src/lib/kotlin/hiiragi283/lib/HTConstants.kt +++ b/src/lib/kotlin/hiiragi283/lib/HTConstants.kt @@ -72,6 +72,9 @@ data object HTConstants { const val POTIONS = "potions" const val BOTTLE_TYPE = "bottle_type" + const val ELEMENT = "element" + const val CHEMICAL = "chemical" + // Recipes // // Vanilla diff --git a/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt index f2cfa19f0..591b9ae5a 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt @@ -7,7 +7,6 @@ import hiiragi283.lib.registry.HTFluidContent import hiiragi283.lib.registry.HTPotionContent import hiiragi283.lib.resource.toLanguageKey import hiiragi283.lib.text.HTHasTranslationKey -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryData import net.minecraft.data.PackOutput import net.minecraft.resources.ResourceKey import net.minecraft.world.item.enchantment.Enchantment @@ -49,14 +48,28 @@ abstract class HTLangProvider(output: PackOutput, modId: String, val langType: H add(translatable, pattern.translate(langType, name)) } + /** + * @since 26.1.8 + */ + fun addFromKey(key: ResourceKey<*>, value: String) { + add(key.toLanguageKey(), value) + } + + /** + * @since 26.1.8 + */ + fun addFromKey(key: ResourceKey<*>, suffix: String, value: String) { + add(key.toLanguageKey(suffix), value) + } + /** * エンチャントの翻訳名を追加します。 * @param value エンチャントの翻訳名 * @param desc エンチャントの説明 */ protected fun addEnchantment(key: ResourceKey, value: String, desc: String) { - add(key.toLanguageKey(), value) - add(key.toLanguageKey("desc"), desc) + addFromKey(key, value) + addFromKey(key, "desc", desc) } /** @@ -92,11 +105,4 @@ abstract class HTLangProvider(output: PackOutput, modId: String, val langType: H add("item.minecraft.lingering_potion.effect.$name", LINGERING_POTION_PATTERN.translate(langType, value)) add("item.minecraft.tipped_arrow.effect.$name", TIPPED_ARROW_PATTERN.translate(langType, value)) } - - /** - * @since 26.1.5 - */ - fun addOreSlurry(key: ResourceKey, value: String) { - add(key.toLanguageKey(), value) - } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt index 1957aa97b..2b41d14c0 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt @@ -1,10 +1,13 @@ package hiiragi283.ragium.api +import hiiragi283.lib.HTConstants import hiiragi283.lib.gui.sync.HTSyncablePayload import hiiragi283.lib.gui.widget.HTWidgetType import hiiragi283.lib.recipe.result.HTFluidResultType import hiiragi283.lib.recipe.result.HTItemResultType import hiiragi283.lib.resource.toId +import hiiragi283.ragium.api.data.chemical.HTChemical +import hiiragi283.ragium.api.data.element.HTElement import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryData import net.minecraft.core.Registry import net.minecraft.resources.ResourceKey @@ -21,6 +24,12 @@ import net.neoforged.neoforge.registries.RegistryBuilder */ @EventBusSubscriber data object RagiumRegistries { + /** + * @since 26.1.8 + */ + @JvmField + val CHEMICAL_TYPE: Registry> = createRegistry(Keys.CHEMICAL_TYPE) + @JvmField val FLUID_RESULT_TYPE: Registry> = createRegistry(Keys.FLUID_RESULT_TYPE) @@ -35,6 +44,7 @@ data object RagiumRegistries { @SubscribeEvent fun registerNewRegistry(event: NewRegistryEvent) { + event.register(CHEMICAL_TYPE) event.register(FLUID_RESULT_TYPE) event.register(ITEM_RESULT_TYPE) event.register(SYNCABLE_SLOT_TYPE) @@ -43,6 +53,16 @@ data object RagiumRegistries { @SubscribeEvent fun registerDynamicRegistries(event: DataPackRegistryEvent.NewRegistry) { + event.dataPackRegistry( + Keys.CHEMICAL, + HTChemical.DISPATCH_CODEC, + HTChemical.DISPATCH_CODEC + ) + event.dataPackRegistry( + Keys.ELEMENT, + HTElement.DIRECT_CODEC, + HTElement.DIRECT_CODEC + ) event.dataPackRegistry( Keys.ORE_SLURRY_DATA, HTOreSlurryData.DIRECT_CODEC, @@ -61,6 +81,12 @@ data object RagiumRegistries { */ data object Keys { // Static + /** + * @since 26.1.8 + */ + @JvmField + val CHEMICAL_TYPE: ResourceKey>> = createKey("chemical_type") + @JvmField val FLUID_RESULT_TYPE: ResourceKey>> = createKey("fluid_result_type") @@ -75,6 +101,18 @@ data object RagiumRegistries { // Dynamic + /** + * @since 26.1.8 + */ + @JvmField + val CHEMICAL: ResourceKey> = createKey(HTConstants.CHEMICAL) + + /** + * @since 26.1.8 + */ + @JvmField + val ELEMENT: ResourceKey> = createKey(HTConstants.ELEMENT) + /** * @since 26.1.5 */ diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt index ac165d95e..74b1aef61 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt @@ -3,6 +3,7 @@ package hiiragi283.ragium.api.data import hiiragi283.lib.data.DataComponentType import hiiragi283.lib.serialization.codec.HTCodecs import hiiragi283.lib.serialization.network.HTStreamCodecs +import hiiragi283.ragium.api.data.chemical.HTChemical import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryData import net.minecraft.core.Holder import net.minecraft.core.component.DataComponentType @@ -17,7 +18,13 @@ import java.util.UUID * @since 26.1.0 */ data object RagiumDataComponents { - // Item Stack + /** + * @since 26.1.8 + */ + @JvmField + val CHEMICAL: DataComponentType> = + DataComponentType(HTChemical.HOLDER_CODEC, HTChemical.HOLDER_STREAM_CODEC) + @JvmField val ENERGY: DataComponentType = DataComponentType(HTCodecs.NON_NEGATIVE_INT, ByteBufCodecs.VAR_INT) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTChemical.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTChemical.kt new file mode 100644 index 000000000..58cfcb7eb --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTChemical.kt @@ -0,0 +1,64 @@ +package hiiragi283.ragium.api.data.chemical + +import com.mojang.serialization.Codec +import com.mojang.serialization.MapCodec +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.network.HTStreamCodecs +import hiiragi283.ragium.api.RagiumRegistries +import net.minecraft.core.Holder +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec + +/** + * 化学物質を表すクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +interface HTChemical { + companion object { + @JvmField + val DISPATCH_CODEC: Codec = + RagiumRegistries.CHEMICAL_TYPE.byNameCodec().dispatch(HTChemical::type, Type<*>::codec) + + @JvmField + val HOLDER_CODEC: Codec> = HTCodecs.holder(RagiumRegistries.Keys.CHEMICAL, DISPATCH_CODEC) + + @JvmField + val DISPATCH_STREAM_CODEC: StreamCodec = + ByteBufCodecs.registry(RagiumRegistries.Keys.CHEMICAL_TYPE).dispatch(HTChemical::type, Type<*>::streamCodec) + + @JvmField + val HOLDER_STREAM_CODEC: StreamCodec> = + HTStreamCodecs.holder(RagiumRegistries.Keys.CHEMICAL, DISPATCH_STREAM_CODEC) + + @JvmField + val WEIGHT_CODEC: MapCodec = Codec.intRange(1, 99).optionalFieldOf("weight", 1) + + @JvmStatic + fun format(weight: Int): String = when { + //値が1の場合はパス + weight <= 1 -> "" + + else -> buildString { + //化学式の下付き数字の桁数調整 + val subscript1: Char = '\u2080' + (weight % 10) + val subscript10: Char = '\u2080' + (weight / 10) + //2桁目が0でない場合,下付き数字を2桁にする + this.append( + buildString { + if (subscript10 != '\u2080') this.append(subscript10) + this.append(subscript1) + } + ) + } + } + } + + fun type(): Type + + fun getChemicalFormula(): String + + @JvmRecord + data class Type(val codec: MapCodec, val streamCodec: StreamCodec) +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTCompoundChemical.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTCompoundChemical.kt new file mode 100644 index 000000000..157f1a4ee --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTCompoundChemical.kt @@ -0,0 +1,109 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.ragium.api.data.chemical + +import com.mojang.serialization.MapCodec +import hiiragi283.lib.HTConstants +import hiiragi283.lib.collection.Nel +import hiiragi283.lib.collection.toNel +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.codec.nelOrElement +import hiiragi283.lib.serialization.network.HTStreamCodecs +import hiiragi283.lib.serialization.network.nelOf +import hiiragi283.lib.util.Either +import hiiragi283.ragium.api.RagiumRegistries +import hiiragi283.ragium.api.data.element.HTElement +import it.unimi.dsi.fastutil.objects.ObjectArrayList +import net.minecraft.core.Holder +import net.minecraft.core.HolderGetter +import net.minecraft.data.worldgen.BootstrapContext +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec +import net.minecraft.resources.ResourceKey +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * 化合物を表す[HTChemical]の実装クラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmRecord +data class HTCompoundChemical(val composition: Nel, Holder>, Int>>) : + HTChemical { + companion object { + @JvmField + val CODEC: MapCodec = HTCodecs.mapPair( + HTCodecs.mapEither( + HTChemical.HOLDER_CODEC.fieldOf(HTConstants.CHEMICAL), + HTElement.HOLDER_CODEC.fieldOf(HTConstants.ELEMENT) + ), + HTChemical.WEIGHT_CODEC + ).codec().nelOrElement().fieldOf("composition").xmap(::HTCompoundChemical, HTCompoundChemical::composition) + + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + HTStreamCodecs.pair( + HTStreamCodecs.either(HTChemical.HOLDER_STREAM_CODEC, HTElement.HOLDER_STREAM_CODEC), + ByteBufCodecs.VAR_INT + ).nelOf(), + HTCompoundChemical::composition, + ::HTCompoundChemical + ) + + @JvmField + val TYPE: HTChemical.Type = HTChemical.Type(CODEC, STREAM_CODEC) + + @JvmStatic + inline fun build(context: BootstrapContext<*>, builderAction: Builder.() -> Unit): HTCompoundChemical { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return Builder(context).apply(builderAction).build() + } + } + + override fun type(): HTChemical.Type = TYPE + + override fun getChemicalFormula(): String = composition.joinToString( + separator = "", + transform = { (either: Either, Holder>, weight: Int) -> + buildString { + append( + either.fold( + { chemical: Holder -> "(${chemical.value().getChemicalFormula()})" }, + { element: Holder -> element.value().symbol } + ) + ) + append(HTChemical.format(weight)) + } + } + ) + + class Builder( + private val chemicalGetter: HolderGetter, + private val elementGetter: HolderGetter + ) { + constructor(context: BootstrapContext<*>) : this( + context.lookup(RagiumRegistries.Keys.CHEMICAL), + context.lookup(RagiumRegistries.Keys.ELEMENT) + ) + + private val composition: MutableList, Holder>, Int>> = + ObjectArrayList() + + @JvmName("addChemical") + fun add(chemical: ResourceKey, weight: Int): Builder = apply { + composition += Either.Left(chemicalGetter.getOrThrow(chemical)) to weight + } + + @JvmName("addElement") + fun add(element: ResourceKey, weight: Int): Builder = apply { + composition += Either.Right(elementGetter.getOrThrow(element)) to weight + } + + fun build(): HTCompoundChemical = HTCompoundChemical(composition.toNel()) + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTSimpleChemical.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTSimpleChemical.kt new file mode 100644 index 000000000..b74e43f21 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTSimpleChemical.kt @@ -0,0 +1,44 @@ +package hiiragi283.ragium.api.data.chemical + +import com.mojang.serialization.MapCodec +import hiiragi283.lib.HTConstants +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.ragium.api.data.element.HTElement +import net.minecraft.core.Holder +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec + +/** + * 単体を表す[HTChemical]の実装クラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmRecord +data class HTSimpleChemical(val element: Holder, val weight: Int) : HTChemical { + companion object { + @JvmField + val CODEC: MapCodec = HTCodecs.recordMap { instance -> + instance.group( + HTElement.HOLDER_CODEC.fieldOf(HTConstants.ELEMENT).forGetter(HTSimpleChemical::element), + HTChemical.WEIGHT_CODEC.forGetter(HTSimpleChemical::weight) + ).apply(instance, ::HTSimpleChemical) + } + + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + HTElement.HOLDER_STREAM_CODEC, + HTSimpleChemical::element, + ByteBufCodecs.VAR_INT, + HTSimpleChemical::weight, + ::HTSimpleChemical + ) + + @JvmField + val TYPE: HTChemical.Type = HTChemical.Type(CODEC, STREAM_CODEC) + } + + override fun type(): HTChemical.Type = TYPE + + override fun getChemicalFormula(): String = "${element.value().symbol}${HTChemical.format(weight)}" +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt new file mode 100644 index 000000000..764a879cc --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt @@ -0,0 +1,89 @@ +package hiiragi283.ragium.api.data.chemical + +import hiiragi283.lib.registry.createKey +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.RagiumRegistries +import hiiragi283.ragium.api.data.element.HTElement +import hiiragi283.ragium.api.data.element.RagiumElements +import net.minecraft.core.HolderGetter +import net.minecraft.data.worldgen.BootstrapContext +import net.minecraft.resources.ResourceKey + +/** + * Ragiumで追加される[化学物質][HTChemical]をまとめたクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +data object RagiumChemicals { + // Simple Substances // + + // 1st Period + @JvmField + val HYDROGEN: ResourceKey = create("hydrogen") + + // 2nd Period + @JvmField + val CARBON: ResourceKey = create("carbon") + + @JvmField + val DIAMOND: ResourceKey = create("diamond") + + @JvmField + val NITROGEN: ResourceKey = create("nitrogen") + + @JvmField + val OXYGEN: ResourceKey = create("oxygen") + + // 3rd Period + @JvmField + val ALUMINUM: ResourceKey = create("aluminum") + + @JvmField + val SILICON: ResourceKey = create("silicon") + + @JvmField + val SULFUR: ResourceKey = create("sulfur") + + @JvmField + val CHLORINE: ResourceKey = create("chlorine") + + // 4th Period + + // Compounds // + + // 3rd Period + @JvmField + val ALUMINA: ResourceKey = create("alumina") + + // Mixtures // + + @JvmStatic + private fun create(name: String): ResourceKey = + RagiumRegistries.Keys.CHEMICAL.createKey(RagiumAPI.id(name)) + + @JvmStatic + fun bootstrap(context: BootstrapContext) { + val getter: HolderGetter = context.lookup(RagiumRegistries.Keys.ELEMENT) + // Simple Substances + context.register(HYDROGEN, HTSimpleChemical(getter.getOrThrow(RagiumElements.HYDROGEN), 2)) + + context.register(CARBON, HTSimpleChemical(getter.getOrThrow(RagiumElements.CARBON), 1)) + context.register(DIAMOND, HTSimpleChemical(getter.getOrThrow(RagiumElements.CARBON), 1)) + context.register(NITROGEN, HTSimpleChemical(getter.getOrThrow(RagiumElements.NITROGEN), 2)) + context.register(OXYGEN, HTSimpleChemical(getter.getOrThrow(RagiumElements.OXYGEN), 2)) + + context.register(ALUMINUM, HTSimpleChemical(getter.getOrThrow(RagiumElements.ALUMINUM), 1)) + context.register(SILICON, HTSimpleChemical(getter.getOrThrow(RagiumElements.SILICON), 1)) + context.register(SULFUR, HTSimpleChemical(getter.getOrThrow(RagiumElements.SULFUR), 1)) + context.register(CHLORINE, HTSimpleChemical(getter.getOrThrow(RagiumElements.CHLORINE), 2)) + + // Compounds + context.register( + ALUMINA, + HTCompoundChemical.build(context) { + add(RagiumElements.ALUMINUM, 2) + add(RagiumElements.OXYGEN, 3) + } + ) + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/element/HTElement.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/element/HTElement.kt new file mode 100644 index 000000000..6b47b963e --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/element/HTElement.kt @@ -0,0 +1,43 @@ +package hiiragi283.ragium.api.data.element + +import com.mojang.serialization.Codec +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.network.HTStreamCodecs +import hiiragi283.ragium.api.RagiumRegistries +import io.netty.buffer.ByteBuf +import net.minecraft.core.Holder +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec +import net.minecraft.util.ExtraCodecs + +/** + * 元素を表すクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmRecord +data class HTElement(val symbol: String) { + companion object { + @JvmField + val DIRECT_CODEC: Codec = HTCodecs.record { instance -> + instance.group( + ExtraCodecs.NON_EMPTY_STRING.fieldOf("symbol").forGetter(HTElement::symbol) + ).apply(instance, ::HTElement) + } + + @JvmField + val HOLDER_CODEC: Codec> = HTCodecs.holder(RagiumRegistries.Keys.ELEMENT, DIRECT_CODEC) + + @JvmField + val DIRECT_STREAM_CODEC: StreamCodec = StreamCodec.composite( + ByteBufCodecs.STRING_UTF8, + HTElement::symbol, + ::HTElement + ) + + @JvmField + val HOLDER_STREAM_CODEC: StreamCodec> = + HTStreamCodecs.holder(RagiumRegistries.Keys.ELEMENT, DIRECT_STREAM_CODEC) + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt new file mode 100644 index 000000000..002c499ed --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt @@ -0,0 +1,73 @@ +package hiiragi283.ragium.api.data.element + +import hiiragi283.lib.registry.createKey +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.RagiumRegistries +import net.minecraft.data.worldgen.BootstrapContext +import net.minecraft.resources.ResourceKey + +/** + * Ragiumで追加される[元素][HTElement]をまとめたクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +data object RagiumElements { + // 1st Period + @JvmField + val HYDROGEN: ResourceKey = create("hydrogen") + + // 2nd Period + @JvmField + val CARBON: ResourceKey = create("carbon") + + @JvmField + val NITROGEN: ResourceKey = create("nitrogen") + + @JvmField + val OXYGEN: ResourceKey = create("oxygen") + + @JvmField + val FLUORINE: ResourceKey = create("fluorine") + + // 3rd Period + @JvmField + val SODIUM: ResourceKey = create("sodium") + + @JvmField + val ALUMINUM: ResourceKey = create("aluminum") + + @JvmField + val SILICON: ResourceKey = create("silicon") + + @JvmField + val SULFUR: ResourceKey = create("sulfur") + + @JvmField + val CHLORINE: ResourceKey = create("chlorine") + + // 4th Period + + @JvmStatic + private fun create(name: String): ResourceKey = + RagiumRegistries.Keys.ELEMENT.createKey(RagiumAPI.id(name)) + + @JvmStatic + fun bootstrap(context: BootstrapContext) { + fun register(key: ResourceKey, symbol: String) { + context.register(key, HTElement(symbol)) + } + + register(HYDROGEN, "H") + + register(CARBON, "C") + register(NITROGEN, "N") + register(OXYGEN, "O") + register(FLUORINE, "F") + + register(SODIUM, "Na") + register(ALUMINUM, "Al") + register(SILICON, "Si") + register(SULFUR, "S") + register(CHLORINE, "Cl") + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index e72b74ffd..f1a80fa69 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -2,6 +2,9 @@ package hiiragi283.ragium.api.material import hiiragi283.lib.data.lang.HTLangName import hiiragi283.lib.tag.HTMaterialLike +import hiiragi283.ragium.api.data.chemical.HTChemical +import hiiragi283.ragium.api.data.chemical.RagiumChemicals +import net.minecraft.resources.ResourceKey sealed interface RagiumMaterial : HTMaterialLike, @@ -20,6 +23,8 @@ sealed interface RagiumMaterial : val COMPARATOR: Comparator = compareBy(RagiumMaterial::materialName) } + val chemicalKey: ResourceKey? + enum class Fuel(langName: HTLangName) : RagiumMaterial, HTLangName by langName { @@ -38,10 +43,12 @@ sealed interface RagiumMaterial : constructor(enName: String, jaName: String) : this(HTLangName(enName, jaName)) + override val chemicalKey: ResourceKey = RagiumChemicals.CARBON + override val materialName: String = name.lowercase() } - enum class Mineral(langName: HTLangName) : + enum class Mineral(langName: HTLangName, override val chemicalKey: ResourceKey?) : RagiumMaterial, HTLangName by langName { // Minecraft @@ -54,7 +61,7 @@ sealed interface RagiumMaterial : // Common SALT("Salt", "食塩"), - SULFUR("Sulfur", "硫黄"), + SULFUR("Sulfur", "硫黄", RagiumChemicals.SULFUR), NITER("Niter", "硝石"), BORAX("Borax", "ホウ砂"), @@ -67,21 +74,24 @@ sealed interface RagiumMaterial : RAGINITE("Raginite", "ラギナイト") ; - constructor(enName: String, jaName: String) : this(HTLangName(enName, jaName)) + constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( + HTLangName(enName, jaName), + chemicalKey + ) open val isVanilla: Boolean = false override val materialName: String = name.lowercase() } - enum class Gem(langName: HTLangName) : + enum class Gem(langName: HTLangName, override val chemicalKey: ResourceKey?) : RagiumMaterial, HTLangName by langName { // Minecraft LAPIS("Lapis", "ラピス"), QUARTZ("Quartz", "水晶"), AMETHYST("Amethyst", "アメジスト"), - DIAMOND("Diamond", "ダイヤモンド"), + DIAMOND("Diamond", "ダイヤモンド", RagiumChemicals.DIAMOND), EMERALD("Emerald", "エメラルド"), ECHO("Echo", "残響"), PRISMARINE("Prismarine", "プリズマリン"), @@ -99,12 +109,15 @@ sealed interface RagiumMaterial : CRYOLITE("Cryolite", "氷晶石") ; - constructor(enName: String, jaName: String) : this(HTLangName(enName, jaName)) + constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( + HTLangName(enName, jaName), + chemicalKey + ) override val materialName: String = name.lowercase() } - enum class Metal(langName: HTLangName) : + enum class Metal(langName: HTLangName, override val chemicalKey: ResourceKey?) : RagiumMaterial, HTLangName by langName { // Minecraft @@ -120,7 +133,7 @@ sealed interface RagiumMaterial : /** * @since 26.1.7 */ - ALUMINUM("Aluminum", "アルミニウム"), + ALUMINUM("Aluminum", "アルミニウム", RagiumChemicals.ALUMINUM), // Ragium @@ -146,37 +159,49 @@ sealed interface RagiumMaterial : } ; - constructor(enName: String, jaName: String) : this(HTLangName(enName, jaName)) + constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( + HTLangName(enName, jaName), + chemicalKey + ) open val hasRawVariant: Boolean = true override val materialName: String = name.lowercase() } - enum class Other(val isPulp: Boolean, langName: HTLangName) : + enum class Other(langName: HTLangName, override val chemicalKey: ResourceKey?) : RagiumMaterial, HTLangName by langName { // Minecraft - WOOD(true, "Wood", "木"), - GLASS(false, "Glass", "ガラス"), - OBSIDIAN(false, "Obsidian", "黒曜石"), - PAPER(true, "Paper", "紙"), + WOOD("Wood", "木") { + override val isPulp: Boolean = true + }, + GLASS("Glass", "ガラス"), + OBSIDIAN("Obsidian", "黒曜石"), + PAPER("Paper", "紙") { + override val isPulp: Boolean = true + }, // Common - CARBON(false, "Carbon", "炭素"), + CARBON("Carbon", "炭素", RagiumChemicals.CARBON), /** * @since 26.1.7 */ - ALUMINA(false, "Alumina", "アルミナ"), + ALUMINA("Alumina", "アルミナ", RagiumChemicals.ALUMINA), /** * @since 26.1.7 */ - SILICON(false, "Silicon", "シリコン") + SILICON("Silicon", "シリコン", RagiumChemicals.SILICON) ; - constructor(isPulp: Boolean, enName: String, jaName: String) : this(isPulp, HTLangName(enName, jaName)) + constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( + HTLangName(enName, jaName), + chemicalKey + ) + + open val isPulp: Boolean = false override val materialName: String = name.lowercase() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt index 19b188271..fe2efe0db 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt @@ -17,6 +17,8 @@ import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConfig import hiiragi283.ragium.api.RagiumRegistries import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.api.data.chemical.HTCompoundChemical +import hiiragi283.ragium.api.data.chemical.HTSimpleChemical import hiiragi283.ragium.api.recipe.RagiumRecipeSerializers import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.text.RagiumTranslation @@ -86,6 +88,7 @@ data object Ragium : HTCommonMod() { ) } event.register(Registries.DATA_COMPONENT_TYPE) { helper -> + helper.register(RagiumAPI.id(HTConstants.CHEMICAL), RagiumDataComponents.CHEMICAL) helper.register(RagiumAPI.id(HTConstants.ENERGY), RagiumDataComponents.ENERGY) helper.register(RagiumAPI.id(HTConstants.FLUID), RagiumDataComponents.FLUID) helper.register(RagiumAPI.id("memory_disc_data"), RagiumDataComponents.MEMORY_DISC_DATA) @@ -115,6 +118,10 @@ data object Ragium : HTCommonMod() { helper.register(RagiumAPI.id(HTConstants.POTION), HTPotionFluidIngredient.TYPE) } + event.register(RagiumRegistries.Keys.CHEMICAL_TYPE) { helper -> + helper.register(RagiumAPI.id("simple"), HTSimpleChemical.TYPE) + helper.register(RagiumAPI.id("compound"), HTCompoundChemical.TYPE) + } event.register(RagiumRegistries.Keys.FLUID_RESULT_TYPE) { helper -> helper.register(RagiumAPI.id("simple"), HTFluidResult.SimpleEntry.TYPE) helper.register(RagiumAPI.id(HTConstants.POTION), HTFluidResult.PotionEntry.TYPE) diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index 9d0aa3b27..f673a16ac 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -11,9 +11,12 @@ import hiiragi283.lib.registry.HTDeferredItemRegister import hiiragi283.lib.registry.HTSimpleDeferredItem import hiiragi283.lib.text.HTCommonTranslation import hiiragi283.lib.text.Text +import hiiragi283.lib.text.toText import hiiragi283.lib.transfer.fluid.HTFluidView import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.api.data.chemical.HTChemical +import hiiragi283.ragium.api.data.chemical.RagiumChemicals import hiiragi283.ragium.api.data.oreSlurry.RagiumOreSlurryData import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial @@ -22,13 +25,17 @@ import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.item.component.RagiumToolMaterials import net.minecraft.ChatFormatting +import net.minecraft.core.Holder import net.minecraft.core.HolderLookup import net.minecraft.core.component.DataComponentMap +import net.minecraft.core.component.DataComponentType +import net.minecraft.resources.ResourceKey import net.minecraft.world.item.HoneycombItem import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.item.Items import net.minecraft.world.item.Rarity +import net.minecraft.world.level.ItemLike import net.neoforged.bus.api.IEventBus import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent import net.neoforged.neoforge.common.tooltip.TooltipLocation @@ -118,6 +125,9 @@ data object RagiumItems { if (material == RagiumMaterial.Metal.NETHERITE) { properties.fireResistant() } + material.chemicalKey?.let { + properties.delayedHolderComponent(RagiumDataComponents.CHEMICAL, it) + } properties } ) @@ -134,13 +144,17 @@ data object RagiumItems { // Heat @JvmField - val COAL_COKE: HTSimpleDeferredItem = REGISTER.registerSimpleItem(RagiumMaterial.Fuel.COAL_COKE.materialName) + val COAL_COKE: HTSimpleDeferredItem = REGISTER.registerSimpleItem(RagiumMaterial.Fuel.COAL_COKE.materialName) { + it.delayedHolderComponent(RagiumDataComponents.CHEMICAL, RagiumChemicals.CARBON) + } @JvmField val TAR: HTSimpleDeferredItem = REGISTER.registerSimpleItem("tar") @JvmField - val PITCH_COKE: HTSimpleDeferredItem = REGISTER.registerSimpleItem(RagiumMaterial.Fuel.PITCH_COKE.materialName) + val PITCH_COKE: HTSimpleDeferredItem = REGISTER.registerSimpleItem(RagiumMaterial.Fuel.PITCH_COKE.materialName) { + it.delayedHolderComponent(RagiumDataComponents.CHEMICAL, RagiumChemicals.CARBON) + } // Chemical @JvmField @@ -170,7 +184,9 @@ data object RagiumItems { // Electronics @JvmField - val CRUDE_SILICON: HTSimpleDeferredItem = REGISTER.registerSimpleItem("crude_silicon") + val CRUDE_SILICON: HTSimpleDeferredItem = REGISTER.registerSimpleItem("crude_silicon") { + it.delayedHolderComponent(RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON) + } @JvmField val SILICON_WAFER: HTSimpleDeferredItem = REGISTER.registerSimpleItem("silicon_wafer") @@ -273,6 +289,12 @@ data object RagiumItems { ) }.let(builder::accept) } + event.registerAppender( + TooltipLocation.HEAD + ) { stack: ItemStack, _, _, _, _, builder: Consumer -> + val chemical: Holder = stack.get(RagiumDataComponents.CHEMICAL) ?: return@registerAppender + builder.accept(chemical.value().getChemicalFormula().toText().withStyle(ChatFormatting.YELLOW)) + } } @JvmStatic @@ -293,18 +315,22 @@ data object RagiumItems { @JvmStatic private fun modifyDefaultComponents(event: ModifyDefaultComponentsEvent) { - // Item - event.modify(Items.RAW_COPPER) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> - builder.set(RagiumDataComponents.ORE_SLURRY_DATA, provider.getOrThrow(RagiumOreSlurryData.COPPER)) - } - event.modify(Items.RAW_IRON) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> - builder.set(RagiumDataComponents.ORE_SLURRY_DATA, provider.getOrThrow(RagiumOreSlurryData.IRON)) - } - event.modify(Items.RAW_GOLD) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> - builder.set(RagiumDataComponents.ORE_SLURRY_DATA, provider.getOrThrow(RagiumOreSlurryData.GOLD)) - } - event.modify(Items.ANCIENT_DEBRIS) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> - builder.set(RagiumDataComponents.ORE_SLURRY_DATA, provider.getOrThrow(RagiumOreSlurryData.NETHERITE_SCRAP)) + fun setHolder(item: ItemLike, type: DataComponentType>, key: ResourceKey) { + event.modify(item) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> + builder.set(type, provider.getOrThrow(key)) + } } + // Chemical + setHolder(Items.COAL_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.CARBON) + setHolder(Items.COAL, RagiumDataComponents.CHEMICAL, RagiumChemicals.CARBON) + setHolder(Items.CHARCOAL, RagiumDataComponents.CHEMICAL, RagiumChemicals.CARBON) + + setHolder(Items.DIAMOND_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.DIAMOND) + setHolder(Items.DIAMOND, RagiumDataComponents.CHEMICAL, RagiumChemicals.DIAMOND) + // Ore Slurry + setHolder(Items.RAW_COPPER, RagiumDataComponents.ORE_SLURRY_DATA, RagiumOreSlurryData.COPPER) + setHolder(Items.RAW_IRON, RagiumDataComponents.ORE_SLURRY_DATA, RagiumOreSlurryData.IRON) + setHolder(Items.RAW_GOLD, RagiumDataComponents.ORE_SLURRY_DATA, RagiumOreSlurryData.GOLD) + setHolder(Items.ANCIENT_DEBRIS, RagiumDataComponents.ORE_SLURRY_DATA, RagiumOreSlurryData.NETHERITE_SCRAP) } } From 03806c29b37b716aebe1b11a28c10ec1eed41fcc Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Fri, 25 Sep 2026 22:37:16 +0900 Subject: [PATCH 02/14] =?UTF-8?q?feat:=20=E3=81=95=E3=82=89=E3=81=AB?= =?UTF-8?q?=E5=85=83=E7=B4=A0=E3=81=A8=E5=8C=96=E5=AD=A6=E7=89=A9=E8=B3=AA?= =?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 --- .../data/ragium/ragium/chemical/copper.json | 4 + .../data/ragium/ragium/chemical/cryolite.json | 16 ++++ .../data/ragium/ragium/chemical/fluorite.json | 12 +++ .../data/ragium/ragium/chemical/gold.json | 4 + .../data/ragium/ragium/chemical/iron.json | 4 + .../data/ragium/ragium/chemical/nitrate.json | 12 +++ .../ragium/chemical/potassium_nitrate.json | 11 +++ .../ragium/chemical/silicon_dioxide.json | 12 +++ .../ragium/chemical/sodium_chloride.json | 11 +++ .../data/ragium/ragium/chemical/sulfate.json | 12 +++ .../data/ragium/ragium/element/calcium.json | 3 + .../data/ragium/ragium/element/copper.json | 3 + .../data/ragium/ragium/element/gold.json | 3 + .../data/ragium/ragium/element/iron.json | 3 + .../data/ragium/ragium/element/potassium.json | 3 + .../api/data/chemical/HTCompoundChemical.kt | 8 +- .../api/data/chemical/RagiumChemicals.kt | 87 +++++++++++++++++++ .../ragium/api/data/element/RagiumElements.kt | 22 +++++ .../ragium/api/material/RagiumMaterial.kt | 20 ++--- .../ragium/common/block/RagiumBlocks.kt | 25 ++++-- .../ragium/common/item/RagiumItems.kt | 15 ++++ 21 files changed, 272 insertions(+), 18 deletions(-) create mode 100644 src/generated/resources/data/ragium/ragium/chemical/copper.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/cryolite.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/fluorite.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/gold.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/iron.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/nitrate.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/potassium_nitrate.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/silicon_dioxide.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/sodium_chloride.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/sulfate.json create mode 100644 src/generated/resources/data/ragium/ragium/element/calcium.json create mode 100644 src/generated/resources/data/ragium/ragium/element/copper.json create mode 100644 src/generated/resources/data/ragium/ragium/element/gold.json create mode 100644 src/generated/resources/data/ragium/ragium/element/iron.json create mode 100644 src/generated/resources/data/ragium/ragium/element/potassium.json diff --git a/src/generated/resources/data/ragium/ragium/chemical/copper.json b/src/generated/resources/data/ragium/ragium/chemical/copper.json new file mode 100644 index 000000000..2064f7472 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/copper.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:copper" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/cryolite.json b/src/generated/resources/data/ragium/ragium/chemical/cryolite.json new file mode 100644 index 000000000..2fc87e429 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/cryolite.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:sodium", + "weight": 3 + }, + { + "element": "ragium:aluminum" + }, + { + "element": "ragium:fluorine", + "weight": 6 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/fluorite.json b/src/generated/resources/data/ragium/ragium/chemical/fluorite.json new file mode 100644 index 000000000..f8fce3ded --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/fluorite.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:calcium" + }, + { + "element": "ragium:fluorine", + "weight": 2 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/gold.json b/src/generated/resources/data/ragium/ragium/chemical/gold.json new file mode 100644 index 000000000..06a9e6d5e --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/gold.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:gold" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/iron.json b/src/generated/resources/data/ragium/ragium/chemical/iron.json new file mode 100644 index 000000000..fff0d9cea --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/iron.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:iron" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/nitrate.json b/src/generated/resources/data/ragium/ragium/chemical/nitrate.json new file mode 100644 index 000000000..ee421eb5c --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/nitrate.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:nitrogen" + }, + { + "element": "ragium:oxygen", + "weight": 3 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/potassium_nitrate.json b/src/generated/resources/data/ragium/ragium/chemical/potassium_nitrate.json new file mode 100644 index 000000000..322dc32f9 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/potassium_nitrate.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:potassium" + }, + { + "chemical": "ragium:nitrate" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/silicon_dioxide.json b/src/generated/resources/data/ragium/ragium/chemical/silicon_dioxide.json new file mode 100644 index 000000000..5d8350baf --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/silicon_dioxide.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:silicon" + }, + { + "element": "ragium:oxygen", + "weight": 2 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sodium_chloride.json b/src/generated/resources/data/ragium/ragium/chemical/sodium_chloride.json new file mode 100644 index 000000000..8f576d54d --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sodium_chloride.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:sodium" + }, + { + "element": "ragium:chlorine" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sulfate.json b/src/generated/resources/data/ragium/ragium/chemical/sulfate.json new file mode 100644 index 000000000..5210ee447 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sulfate.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:sulfur" + }, + { + "element": "ragium:oxygen", + "weight": 4 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/calcium.json b/src/generated/resources/data/ragium/ragium/element/calcium.json new file mode 100644 index 000000000..e63670375 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/calcium.json @@ -0,0 +1,3 @@ +{ + "symbol": "Ca" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/copper.json b/src/generated/resources/data/ragium/ragium/element/copper.json new file mode 100644 index 000000000..1549e9407 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/copper.json @@ -0,0 +1,3 @@ +{ + "symbol": "Cu" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/gold.json b/src/generated/resources/data/ragium/ragium/element/gold.json new file mode 100644 index 000000000..33595d582 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/gold.json @@ -0,0 +1,3 @@ +{ + "symbol": "Au" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/iron.json b/src/generated/resources/data/ragium/ragium/element/iron.json new file mode 100644 index 000000000..d782ef466 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/iron.json @@ -0,0 +1,3 @@ +{ + "symbol": "Fe" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/potassium.json b/src/generated/resources/data/ragium/ragium/element/potassium.json new file mode 100644 index 000000000..d46b76fb2 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/potassium.json @@ -0,0 +1,3 @@ +{ + "symbol": "K" +} \ No newline at end of file diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTCompoundChemical.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTCompoundChemical.kt index 157f1a4ee..96cb9e2b2 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTCompoundChemical.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTCompoundChemical.kt @@ -73,7 +73,13 @@ data class HTCompoundChemical(val composition: Nel -> "(${chemical.value().getChemicalFormula()})" }, + { chemical: Holder -> + val formula: String = chemical.value().getChemicalFormula() + when { + weight > 1 -> "($formula)" + else -> formula + } + }, { element: Holder -> element.value().symbol } ) ) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt index 764a879cc..e5cc52eb8 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt @@ -48,13 +48,44 @@ data object RagiumChemicals { val CHLORINE: ResourceKey = create("chlorine") // 4th Period + @JvmField + val IRON: ResourceKey = create("iron") + + @JvmField + val COPPER: ResourceKey = create("copper") + + // 6th Period + @JvmField + val GOLD: ResourceKey = create("gold") // Compounds // + // 2nd Period + @JvmField + val NITRATE: ResourceKey = create("nitrate") + + @JvmField + val POTASSIUM_NITRATE: ResourceKey = create("potassium_nitrate") + + @JvmField + val FLUORITE: ResourceKey = create("fluorite") + + @JvmField + val CRYOLITE: ResourceKey = create("cryolite") + // 3rd Period + @JvmField + val SODIUM_CHLORIDE: ResourceKey = create("sodium_chloride") + @JvmField val ALUMINA: ResourceKey = create("alumina") + @JvmField + val SILICON_DIOXIDE: ResourceKey = create("silicon_dioxide") + + @JvmField + val SULFATE: ResourceKey = create("sulfate") + // Mixtures // @JvmStatic @@ -77,7 +108,49 @@ data object RagiumChemicals { context.register(SULFUR, HTSimpleChemical(getter.getOrThrow(RagiumElements.SULFUR), 1)) context.register(CHLORINE, HTSimpleChemical(getter.getOrThrow(RagiumElements.CHLORINE), 2)) + context.register(IRON, HTSimpleChemical(getter.getOrThrow(RagiumElements.IRON), 1)) + context.register(COPPER, HTSimpleChemical(getter.getOrThrow(RagiumElements.COPPER), 1)) + + context.register(GOLD, HTSimpleChemical(getter.getOrThrow(RagiumElements.GOLD), 1)) + // Compounds + context.register( + NITRATE, + HTCompoundChemical.build(context) { + add(RagiumElements.NITROGEN, 1) + add(RagiumElements.OXYGEN, 3) + } + ) + context.register( + POTASSIUM_NITRATE, + HTCompoundChemical.build(context) { + add(RagiumElements.POTASSIUM, 1) + add(NITRATE, 1) + } + ) + context.register( + FLUORITE, + HTCompoundChemical.build(context) { + add(RagiumElements.CALCIUM, 1) + add(RagiumElements.FLUORINE, 2) + } + ) + context.register( + CRYOLITE, + HTCompoundChemical.build(context) { + add(RagiumElements.SODIUM, 3) + add(RagiumElements.ALUMINUM, 1) + add(RagiumElements.FLUORINE, 6) + } + ) + + context.register( + SODIUM_CHLORIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.SODIUM, 1) + add(RagiumElements.CHLORINE, 1) + } + ) context.register( ALUMINA, HTCompoundChemical.build(context) { @@ -85,5 +158,19 @@ data object RagiumChemicals { add(RagiumElements.OXYGEN, 3) } ) + context.register( + SILICON_DIOXIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.SILICON, 1) + add(RagiumElements.OXYGEN, 2) + } + ) + context.register( + SULFATE, + HTCompoundChemical.build(context) { + add(RagiumElements.SULFUR, 1) + add(RagiumElements.OXYGEN, 4) + } + ) } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt index 002c499ed..2e07a2115 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt @@ -46,6 +46,21 @@ data object RagiumElements { val CHLORINE: ResourceKey = create("chlorine") // 4th Period + @JvmField + val POTASSIUM: ResourceKey = create("potassium") + + @JvmField + val CALCIUM: ResourceKey = create("calcium") + + @JvmField + val IRON: ResourceKey = create("iron") + + @JvmField + val COPPER: ResourceKey = create("copper") + + // 6th Period + @JvmField + val GOLD: ResourceKey = create("gold") @JvmStatic private fun create(name: String): ResourceKey = @@ -69,5 +84,12 @@ data object RagiumElements { register(SILICON, "Si") register(SULFUR, "S") register(CHLORINE, "Cl") + + register(POTASSIUM, "K") + register(CALCIUM, "Ca") + register(IRON, "Fe") + register(COPPER, "Cu") + + register(GOLD, "Au") } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index f1a80fa69..877d5d09a 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -60,9 +60,9 @@ sealed interface RagiumMaterial : }, // Common - SALT("Salt", "食塩"), + SALT("Salt", "食塩", RagiumChemicals.SODIUM_CHLORIDE), SULFUR("Sulfur", "硫黄", RagiumChemicals.SULFUR), - NITER("Niter", "硝石"), + NITER("Niter", "硝石", RagiumChemicals.POTASSIUM_NITRATE), BORAX("Borax", "ホウ砂"), /** @@ -89,8 +89,8 @@ sealed interface RagiumMaterial : HTLangName by langName { // Minecraft LAPIS("Lapis", "ラピス"), - QUARTZ("Quartz", "水晶"), - AMETHYST("Amethyst", "アメジスト"), + QUARTZ("Quartz", "水晶", RagiumChemicals.SILICON_DIOXIDE), + AMETHYST("Amethyst", "アメジスト", RagiumChemicals.SILICON_DIOXIDE), DIAMOND("Diamond", "ダイヤモンド", RagiumChemicals.DIAMOND), EMERALD("Emerald", "エメラルド"), ECHO("Echo", "残響"), @@ -101,12 +101,12 @@ sealed interface RagiumMaterial : /** * @since 26.1.7 */ - FLUORITE("Fluorite", "蛍石"), + FLUORITE("Fluorite", "蛍石", RagiumChemicals.FLUORITE), /** * @since 26.1.7 */ - CRYOLITE("Cryolite", "氷晶石") + CRYOLITE("Cryolite", "氷晶石", RagiumChemicals.CRYOLITE) ; constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( @@ -121,9 +121,9 @@ sealed interface RagiumMaterial : RagiumMaterial, HTLangName by langName { // Minecraft - COPPER("Copper", "銅"), - IRON("Iron", "鉄"), - GOLD("Gold", "金"), + COPPER("Copper", "銅", RagiumChemicals.COPPER), + IRON("Iron", "鉄", RagiumChemicals.IRON), + GOLD("Gold", "金", RagiumChemicals.GOLD), NETHERITE("Netherite", "ネザライト") { override val hasRawVariant: Boolean = false }, @@ -176,7 +176,7 @@ sealed interface RagiumMaterial : WOOD("Wood", "木") { override val isPulp: Boolean = true }, - GLASS("Glass", "ガラス"), + GLASS("Glass", "ガラス", RagiumChemicals.SILICON_DIOXIDE), OBSIDIAN("Obsidian", "黒曜石"), PAPER("Paper", "紙") { override val isPulp: Boolean = true diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index bf74266fd..32a5e4163 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -19,6 +19,7 @@ import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConfig import hiiragi283.ragium.api.RagiumConstants import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.api.data.chemical.RagiumChemicals import hiiragi283.ragium.api.material.HTBlockPart import hiiragi283.ragium.api.material.HTOreBlockPart import hiiragi283.ragium.api.material.HTStorageBlockPart @@ -137,7 +138,11 @@ data object RagiumBlocks { material, REGISTER.registerSimple( part.createName(material), - blockFactory = { DropExperienceBlock(UniformInt.of(0, 2), properties.setId(it)) } + blockFactory = { DropExperienceBlock(UniformInt.of(0, 2), properties.setId(it)) }, + itemProp = { prop: Item.Properties -> + material.chemicalKey?.let { prop.delayedHolderComponent(RagiumDataComponents.CHEMICAL, it) } + prop + } ) ) } @@ -185,8 +190,11 @@ data object RagiumBlocks { // Fluorite @JvmField - val FLUORITE_BLOCK: HTSimpleDeferredBlockAndItem = - REGISTER.registerSimple("fluorite_block", copyOf(Blocks.QUARTZ_BLOCK).mapColor(MapColor.COLOR_GREEN)) + val FLUORITE_BLOCK: HTSimpleDeferredBlockAndItem = REGISTER.registerSimple( + "fluorite_block", + copyOf(Blocks.QUARTZ_BLOCK).mapColor(MapColor.COLOR_GREEN), + itemProp = { it.delayedHolderComponent(RagiumDataComponents.CHEMICAL, RagiumChemicals.FLUORITE) } + ) @JvmField val FLUORITE_SLAB: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( @@ -205,8 +213,11 @@ data object RagiumBlocks { // Cryolite @JvmField - val CRYOLITE_BLOCK: HTSimpleDeferredBlockAndItem = - REGISTER.registerSimple("cryolite_block", copyOf(Blocks.QUARTZ_BLOCK)) + val CRYOLITE_BLOCK: HTSimpleDeferredBlockAndItem = REGISTER.registerSimple( + "cryolite_block", + copyOf(Blocks.QUARTZ_BLOCK), + itemProp = { it.delayedHolderComponent(RagiumDataComponents.CHEMICAL, RagiumChemicals.CRYOLITE) } + ) @JvmField val CRYOLITE_SLAB: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( @@ -429,13 +440,13 @@ data object RagiumBlocks { 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 + val block: ItemLike = MATERIAL_BLOCKS[part, material] ?: continue event.modify(block) { builder: DataComponentMap.Builder, _, _ -> builder.set(DataComponents.RARITY, rarity) } } } - event.modify(RagiumBlocks.CREATIVE_BATTERY) { builder: DataComponentMap.Builder, _, _ -> + event.modify(CREATIVE_BATTERY) { builder: DataComponentMap.Builder, _, _ -> builder.set(DataComponents.RARITY, Rarity.EPIC) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index f673a16ac..74667d001 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -327,6 +327,21 @@ data object RagiumItems { setHolder(Items.DIAMOND_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.DIAMOND) setHolder(Items.DIAMOND, RagiumDataComponents.CHEMICAL, RagiumChemicals.DIAMOND) + + setHolder(Items.IRON_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.IRON) + setHolder(Items.IRON_INGOT, RagiumDataComponents.CHEMICAL, RagiumChemicals.IRON) + setHolder(Items.IRON_NUGGET, RagiumDataComponents.CHEMICAL, RagiumChemicals.IRON) + + setHolder(Items.COPPER_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.COPPER) + setHolder(Items.COPPER_INGOT, RagiumDataComponents.CHEMICAL, RagiumChemicals.COPPER) + setHolder(Items.COPPER_NUGGET, RagiumDataComponents.CHEMICAL, RagiumChemicals.COPPER) + + setHolder(Items.GOLD_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.GOLD) + setHolder(Items.GOLD_INGOT, RagiumDataComponents.CHEMICAL, RagiumChemicals.GOLD) + setHolder(Items.GOLD_NUGGET, RagiumDataComponents.CHEMICAL, RagiumChemicals.GOLD) + + setHolder(Items.QUARTZ_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON_DIOXIDE) + setHolder(Items.QUARTZ, RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON_DIOXIDE) // Ore Slurry setHolder(Items.RAW_COPPER, RagiumDataComponents.ORE_SLURRY_DATA, RagiumOreSlurryData.COPPER) setHolder(Items.RAW_IRON, RagiumDataComponents.ORE_SLURRY_DATA, RagiumOreSlurryData.IRON) From c358a2e813d0c07dc3702beddca000a3453f6481 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Fri, 25 Sep 2026 23:30:25 +0900 Subject: [PATCH 03/14] =?UTF-8?q?feat:=20=E6=B6=B2=E4=BD=93=E3=81=AB?= =?UTF-8?q?=E3=82=82=E5=8C=96=E5=AD=A6=E7=89=A9=E8=B3=AA=E3=81=AE=E3=83=84?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E3=83=81=E3=83=83=E3=83=97=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=20feat:=20=E3=82=B7=E3=83=95=E3=83=88=E3=82=AD?= =?UTF-8?q?=E3=83=BC=E3=82=92=E6=8A=BC=E3=81=99=E3=81=A8=E5=8C=96=E5=AD=A6?= =?UTF-8?q?=E7=89=A9=E8=B3=AA=E3=81=AE=E5=90=8D=E5=89=8D=E3=82=92=E8=A6=8B?= =?UTF-8?q?=E3=82=89=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/client/RagiumClient.kt | 62 +++++++++++ .../client/event/RagiumClientEventHandler.kt | 8 +- .../data/lang/RagiumEnglishLangProvider.kt | 56 ++++++++-- .../data/lang/RagiumJapaneseLangProvider.kt | 56 ++++++++-- .../resources/assets/ragium/lang/en_us.json | 28 +++++ .../resources/assets/ragium/lang/ja_jp.json | 28 +++++ .../ragium/chemical/hydrogen_chloride.json | 11 ++ .../ragium/chemical/hydrogen_fluoride.json | 11 ++ .../ragium/ragium/chemical/hydroxide.json | 11 ++ .../ragium/ragium/chemical/nitric_acid.json | 11 ++ .../ragium/chemical/sodium_hydroxide.json | 11 ++ .../ragium/chemical/sulfur_dioxide.json | 12 +++ .../ragium/chemical/sulfur_trioxide.json | 12 +++ .../ragium/ragium/chemical/sulfuric_acid.json | 12 +++ .../data/ragium/ragium/chemical/water.json | 12 +++ .../ragium/api/data/chemical/HTChemical.kt | 7 +- .../api/data/chemical/RagiumChemicals.kt | 100 +++++++++++++++++- .../data/chemical/HTClientChemicalHelper.kt | 25 +++++ .../hiiragi283/ragium/common/RagiumCommon.kt | 43 ++++++++ .../ragium/common/item/RagiumItems.kt | 72 ++----------- 20 files changed, 508 insertions(+), 80 deletions(-) create mode 100644 src/generated/resources/data/ragium/ragium/chemical/hydrogen_chloride.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/hydrogen_fluoride.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/hydroxide.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/nitric_acid.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/sodium_hydroxide.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/sulfur_dioxide.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/sulfur_trioxide.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/sulfuric_acid.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/water.json create mode 100644 src/libClient/kotlin/hiiragi283/ragium/api/data/chemical/HTClientChemicalHelper.kt diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 4f8e44483..7c25e4c96 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -1,6 +1,7 @@ package hiiragi283.ragium.client import hiiragi283.lib.HTConstants +import hiiragi283.lib.capability.HTFluidCapabilities import hiiragi283.lib.event.HTRegisterWidgetRendererEvent import hiiragi283.lib.fluid.FluidStackTintSource import hiiragi283.lib.fluid.HTFluidModelRegister @@ -8,8 +9,13 @@ import hiiragi283.lib.item.alchemy.HTPotionHelper import hiiragi283.lib.mod.HTClientMod import hiiragi283.lib.network.HTPayloadHandlers import hiiragi283.lib.resource.vanillaId +import hiiragi283.lib.text.HTCommonTranslation +import hiiragi283.lib.text.Text +import hiiragi283.lib.transfer.fluid.HTFluidView import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.data.chemical.HTClientChemicalHelper import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper +import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.client.gui.screen.HTWidgetContainerScreen import hiiragi283.ragium.client.gui.screen.tooltip.HTMemoryDiscClientTooltipComponent import hiiragi283.ragium.client.gui.widget.HTEnergySlotWidgetRenderer @@ -25,9 +31,11 @@ import hiiragi283.ragium.common.gui.widget.RagiumWidgetTypes import hiiragi283.ragium.common.item.tooltip.HTMemoryDiscTooltipComponent import hiiragi283.ragium.common.network.HTUpdateBlockEntityPacket import hiiragi283.ragium.common.network.HTUpdateMenuPacket +import net.minecraft.ChatFormatting import net.minecraft.client.resources.model.sprite.Material import net.minecraft.util.ARGB import net.minecraft.world.item.DyeColor +import net.minecraft.world.item.ItemStack import net.neoforged.api.distmarker.Dist import net.neoforged.bus.api.IEventBus import net.neoforged.fml.ModContainer @@ -37,8 +45,12 @@ 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 +import net.neoforged.neoforge.common.tooltip.TooltipLocation +import net.neoforged.neoforge.event.RegisterTooltipAppendersEvent import net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.transfer.fluid.FluidResource import java.awt.Color +import java.util.function.Consumer @Mod(value = RagiumAPI.MOD_ID, dist = [Dist.CLIENT]) data object RagiumClient : HTClientMod() { @@ -46,6 +58,7 @@ data object RagiumClient : HTClientMod() { eventBus.addListener { event: RegisterClientTooltipComponentFactoriesEvent -> event.register(HTMemoryDiscTooltipComponent::class.java, ::HTMemoryDiscClientTooltipComponent) } + eventBus.addListener(::registerTooltipAppenders) configScreen(container) } @@ -219,4 +232,53 @@ data object RagiumClient : HTClientMod() { event.registerBlockEntityRenderer(RagiumBlockEntityTypes.TANK.get(), ::HTTankBlockEntityRenderer) event.registerBlockEntityRenderer(RagiumBlockEntityTypes.CREATIVE_TANK.get(), ::HTTankBlockEntityRenderer) } + + @JvmStatic + private fun registerTooltipAppenders(event: RegisterTooltipAppendersEvent) { + event.registerAppender( + TooltipLocation.HEAD + ) { stack: ItemStack, _, _, _, _, builder: Consumer -> + if (!stack.`is`(RagiumTags.Items.SHOW_FLUID_TOOLTIPS)) return@registerAppender + val view: HTFluidView = HTFluidCapabilities.getSlot(stack, 0) ?: return@registerAppender + val isCreative: Boolean = stack.`is`(RagiumTags.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) + } + event.registerAppender( + TooltipLocation.HEAD + ) { stack: ItemStack, _, _, _, _, builder: Consumer -> + HTClientChemicalHelper.addToTooltip(stack, builder::accept) + } + } } diff --git a/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt b/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt index 5b18ca060..83d507b37 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt @@ -1,7 +1,9 @@ package hiiragi283.ragium.client.event import hiiragi283.lib.item.alchemy.HTPotionHelper +import hiiragi283.lib.text.Text import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.data.chemical.HTClientChemicalHelper import hiiragi283.ragium.common.fluid.RagiumFluids import net.neoforged.api.distmarker.Dist import net.neoforged.bus.api.SubscribeEvent @@ -14,8 +16,12 @@ data object RagiumClientEventHandler { @SubscribeEvent fun onFluidTooltip(event: FluidTooltipEvent) { val stack: FluidStack = event.fluidStack + val appender: (Text) -> Unit = event.toolTip::add + // Potion Fluid if (RagiumFluids.POTION.isOf(stack)) { - HTPotionHelper.getContents(stack).addToTooltip(event.context, event.toolTip::add, event.flags, stack) + HTPotionHelper.getContents(stack).addToTooltip(event.context, appender, event.flags, stack) } + // Chemical Tooltip + HTClientChemicalHelper.addToTooltip(stack, appender) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 70afb0f4e..5802091af 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -4,6 +4,8 @@ import hiiragi283.lib.data.lang.HTLangProvider import hiiragi283.lib.data.lang.HTLangTypes import hiiragi283.lib.text.HTCommonTranslation import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.data.chemical.RagiumChemicals +import hiiragi283.ragium.api.data.element.RagiumElements import hiiragi283.ragium.api.data.oreSlurry.RagiumOreSlurryData import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.text.RagiumTranslation @@ -146,12 +148,6 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumMobEffects.FROSTBITE, "Frostbite") add(RagiumMobEffects.CHEMICAL_BURN, "Chemical Burn") - // Ore Slurry - addFromKey(RagiumOreSlurryData.COPPER, "Copper Ore Slurry") - addFromKey(RagiumOreSlurryData.IRON, "Iron Ore Slurry") - addFromKey(RagiumOreSlurryData.GOLD, "Gold Ore Slurry") - addFromKey(RagiumOreSlurryData.NETHERITE_SCRAP, "Ancient Debris Slurry") - // Potion addPotion(RagiumPotions.FROSTBITE, "Frostbite") addPotion(RagiumPotions.CHEMICAL_BURN, "Chemical Burn") @@ -223,5 +219,53 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumTranslation.CONFIG_ENERGY_RATE, "Energy Rate") add(RagiumTranslation.TOOLTIPS_MEMORY_DISC_DATA, $$"Scanned Item: %1$s") + + addDataTranslations() + } + + private fun addDataTranslations() { + // Chemical + addFromKey(RagiumChemicals.HYDROGEN, "Hydrogen") + + addFromKey(RagiumChemicals.CARBON, "Carbon") + addFromKey(RagiumChemicals.DIAMOND, "Diamond") + addFromKey(RagiumChemicals.NITROGEN, "Nitrogen") + addFromKey(RagiumChemicals.OXYGEN, "Oxygen") + + addFromKey(RagiumChemicals.ALUMINUM, "Aluminum") + addFromKey(RagiumChemicals.SILICON, "Silicon") + addFromKey(RagiumChemicals.SULFUR, "Sulfur") + addFromKey(RagiumChemicals.CHLORINE, "Chlorine") + + addFromKey(RagiumChemicals.IRON, "Iron") + addFromKey(RagiumChemicals.COPPER, "Copper") + + addFromKey(RagiumChemicals.HYDROXIDE, "Hydroxide") + addFromKey(RagiumChemicals.WATER, "Water") + // Element + addFromKey(RagiumElements.HYDROGEN, "Hydrogen") + + addFromKey(RagiumElements.CARBON, "Carbon") + addFromKey(RagiumElements.NITROGEN, "Nitrogen") + addFromKey(RagiumElements.OXYGEN, "Oxygen") + addFromKey(RagiumElements.FLUORINE, "Fluorine") + + addFromKey(RagiumElements.SODIUM, "Sodium") + addFromKey(RagiumElements.ALUMINUM, "Aluminum") + addFromKey(RagiumElements.SILICON, "Silicon") + addFromKey(RagiumElements.SULFUR, "Sulfur") + addFromKey(RagiumElements.CHLORINE, "Chlorine") + + addFromKey(RagiumElements.POTASSIUM, "Potassium") + addFromKey(RagiumElements.CALCIUM, "Calcium") + addFromKey(RagiumElements.IRON, "Iron") + addFromKey(RagiumElements.COPPER, "Copper") + + addFromKey(RagiumElements.GOLD, "Gold") + // Ore Slurry + addFromKey(RagiumOreSlurryData.COPPER, "Copper Ore Slurry") + addFromKey(RagiumOreSlurryData.IRON, "Iron Ore Slurry") + addFromKey(RagiumOreSlurryData.GOLD, "Gold Ore Slurry") + addFromKey(RagiumOreSlurryData.NETHERITE_SCRAP, "Ancient Debris Slurry") } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 258880ab3..493eebce8 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -4,6 +4,8 @@ import hiiragi283.lib.data.lang.HTLangProvider import hiiragi283.lib.data.lang.HTLangTypes import hiiragi283.lib.text.HTCommonTranslation import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.data.chemical.RagiumChemicals +import hiiragi283.ragium.api.data.element.RagiumElements import hiiragi283.ragium.api.data.oreSlurry.RagiumOreSlurryData import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.text.RagiumTranslation @@ -142,12 +144,6 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumMobEffects.FROSTBITE, "凍傷") add(RagiumMobEffects.CHEMICAL_BURN, "化学火傷") - // Ore Slurry - addFromKey(RagiumOreSlurryData.COPPER, "銅の鉱石泥") - addFromKey(RagiumOreSlurryData.IRON, "鉄の鉱石泥") - addFromKey(RagiumOreSlurryData.GOLD, "金の鉱石泥") - addFromKey(RagiumOreSlurryData.NETHERITE_SCRAP, "古代の鉱石泥") - // Potion addPotion(RagiumPotions.FROSTBITE, "凍傷") addPotion(RagiumPotions.CHEMICAL_BURN, "化学火傷") @@ -219,5 +215,53 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumTranslation.CONFIG_ENERGY_RATE, "エネルギー使用速度") add(RagiumTranslation.TOOLTIPS_MEMORY_DISC_DATA, $$"スキャン済み: %1$s") + + addDataTranslations() + } + + private fun addDataTranslations() { + // Chemical + addFromKey(RagiumChemicals.HYDROGEN, "水素") + + addFromKey(RagiumChemicals.CARBON, "炭素") + addFromKey(RagiumChemicals.DIAMOND, "ダイヤモンド") + addFromKey(RagiumChemicals.NITROGEN, "窒素") + addFromKey(RagiumChemicals.OXYGEN, "酸素") + + addFromKey(RagiumChemicals.ALUMINUM, "アルミニウム") + addFromKey(RagiumChemicals.SILICON, "ケイ素") + addFromKey(RagiumChemicals.SULFUR, "硫黄") + addFromKey(RagiumChemicals.CHLORINE, "塩素") + + addFromKey(RagiumChemicals.IRON, "鉄") + addFromKey(RagiumChemicals.COPPER, "銅") + + addFromKey(RagiumChemicals.HYDROXIDE, "水酸基") + addFromKey(RagiumChemicals.WATER, "水") + // Element + addFromKey(RagiumElements.HYDROGEN, "水素") + + addFromKey(RagiumElements.CARBON, "炭素") + addFromKey(RagiumElements.NITROGEN, "窒素") + addFromKey(RagiumElements.OXYGEN, "酸素") + addFromKey(RagiumElements.FLUORINE, "フッ素") + + addFromKey(RagiumElements.SODIUM, "ナトリウム") + addFromKey(RagiumElements.ALUMINUM, "アルミニウム") + addFromKey(RagiumElements.SILICON, "ケイ素") + addFromKey(RagiumElements.SULFUR, "硫黄") + addFromKey(RagiumElements.CHLORINE, "塩素") + + addFromKey(RagiumElements.POTASSIUM, "カリウム") + addFromKey(RagiumElements.CALCIUM, "カルシウム") + addFromKey(RagiumElements.IRON, "鉄") + addFromKey(RagiumElements.COPPER, "銅") + + addFromKey(RagiumElements.GOLD, "金") + // Ore Slurry + addFromKey(RagiumOreSlurryData.COPPER, "銅の鉱石泥") + addFromKey(RagiumOreSlurryData.IRON, "鉄の鉱石泥") + addFromKey(RagiumOreSlurryData.GOLD, "金の鉱石泥") + addFromKey(RagiumOreSlurryData.NETHERITE_SCRAP, "古代の鉱石泥") } } diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index d0dee0cd1..d70a25938 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -315,6 +315,34 @@ "item.ragium.wood_gear": "Wood Gear", "item.ragium.wood_tar_bucket": "Wood Tar Bucket", "item.ragium.yellow_dye_bucket": "Yellow Dye Bucket", + "ragium.chemical.ragium.aluminum": "Aluminum", + "ragium.chemical.ragium.carbon": "Carbon", + "ragium.chemical.ragium.chlorine": "Chlorine", + "ragium.chemical.ragium.copper": "Copper", + "ragium.chemical.ragium.diamond": "Diamond", + "ragium.chemical.ragium.hydrogen": "Hydrogen", + "ragium.chemical.ragium.hydroxide": "Hydroxide", + "ragium.chemical.ragium.iron": "Iron", + "ragium.chemical.ragium.nitrogen": "Nitrogen", + "ragium.chemical.ragium.oxygen": "Oxygen", + "ragium.chemical.ragium.silicon": "Silicon", + "ragium.chemical.ragium.sulfur": "Sulfur", + "ragium.chemical.ragium.water": "Water", + "ragium.element.ragium.aluminum": "Aluminum", + "ragium.element.ragium.calcium": "Calcium", + "ragium.element.ragium.carbon": "Carbon", + "ragium.element.ragium.chlorine": "Chlorine", + "ragium.element.ragium.copper": "Copper", + "ragium.element.ragium.fluorine": "Fluorine", + "ragium.element.ragium.gold": "Gold", + "ragium.element.ragium.hydrogen": "Hydrogen", + "ragium.element.ragium.iron": "Iron", + "ragium.element.ragium.nitrogen": "Nitrogen", + "ragium.element.ragium.oxygen": "Oxygen", + "ragium.element.ragium.potassium": "Potassium", + "ragium.element.ragium.silicon": "Silicon", + "ragium.element.ragium.sodium": "Sodium", + "ragium.element.ragium.sulfur": "Sulfur", "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", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index fae291e3f..b8f9c1ce9 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -315,6 +315,34 @@ "item.ragium.wood_gear": "木の歯車", "item.ragium.wood_tar_bucket": "木タール入りバケツ", "item.ragium.yellow_dye_bucket": "黄色の染料入りバケツ", + "ragium.chemical.ragium.aluminum": "アルミニウム", + "ragium.chemical.ragium.carbon": "炭素", + "ragium.chemical.ragium.chlorine": "塩素", + "ragium.chemical.ragium.copper": "銅", + "ragium.chemical.ragium.diamond": "ダイヤモンド", + "ragium.chemical.ragium.hydrogen": "水素", + "ragium.chemical.ragium.hydroxide": "水酸基", + "ragium.chemical.ragium.iron": "鉄", + "ragium.chemical.ragium.nitrogen": "窒素", + "ragium.chemical.ragium.oxygen": "酸素", + "ragium.chemical.ragium.silicon": "ケイ素", + "ragium.chemical.ragium.sulfur": "硫黄", + "ragium.chemical.ragium.water": "水", + "ragium.element.ragium.aluminum": "アルミニウム", + "ragium.element.ragium.calcium": "カルシウム", + "ragium.element.ragium.carbon": "炭素", + "ragium.element.ragium.chlorine": "塩素", + "ragium.element.ragium.copper": "銅", + "ragium.element.ragium.fluorine": "フッ素", + "ragium.element.ragium.gold": "金", + "ragium.element.ragium.hydrogen": "水素", + "ragium.element.ragium.iron": "鉄", + "ragium.element.ragium.nitrogen": "窒素", + "ragium.element.ragium.oxygen": "酸素", + "ragium.element.ragium.potassium": "カリウム", + "ragium.element.ragium.silicon": "ケイ素", + "ragium.element.ragium.sodium": "ナトリウム", + "ragium.element.ragium.sulfur": "硫黄", "ragium.ore_slurry_data.ragium.copper": "銅の鉱石泥", "ragium.ore_slurry_data.ragium.gold": "金の鉱石泥", "ragium.ore_slurry_data.ragium.iron": "鉄の鉱石泥", diff --git a/src/generated/resources/data/ragium/ragium/chemical/hydrogen_chloride.json b/src/generated/resources/data/ragium/ragium/chemical/hydrogen_chloride.json new file mode 100644 index 000000000..391e33091 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/hydrogen_chloride.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:hydrogen" + }, + { + "element": "ragium:chlorine" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/hydrogen_fluoride.json b/src/generated/resources/data/ragium/ragium/chemical/hydrogen_fluoride.json new file mode 100644 index 000000000..8a2706b7f --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/hydrogen_fluoride.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:hydrogen" + }, + { + "element": "ragium:fluorine" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/hydroxide.json b/src/generated/resources/data/ragium/ragium/chemical/hydroxide.json new file mode 100644 index 000000000..4e59fd338 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/hydroxide.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:oxygen" + }, + { + "element": "ragium:hydrogen" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/nitric_acid.json b/src/generated/resources/data/ragium/ragium/chemical/nitric_acid.json new file mode 100644 index 000000000..4e67d6505 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/nitric_acid.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:nitrogen" + }, + { + "chemical": "ragium:nitrate" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sodium_hydroxide.json b/src/generated/resources/data/ragium/ragium/chemical/sodium_hydroxide.json new file mode 100644 index 000000000..dc22add70 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sodium_hydroxide.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:sodium" + }, + { + "chemical": "ragium:hydroxide" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sulfur_dioxide.json b/src/generated/resources/data/ragium/ragium/chemical/sulfur_dioxide.json new file mode 100644 index 000000000..da9b70273 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sulfur_dioxide.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:sulfur" + }, + { + "element": "ragium:oxygen", + "weight": 2 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sulfur_trioxide.json b/src/generated/resources/data/ragium/ragium/chemical/sulfur_trioxide.json new file mode 100644 index 000000000..a11f2ca7a --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sulfur_trioxide.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:sulfur" + }, + { + "element": "ragium:oxygen", + "weight": 3 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sulfuric_acid.json b/src/generated/resources/data/ragium/ragium/chemical/sulfuric_acid.json new file mode 100644 index 000000000..b3ccfc19e --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sulfuric_acid.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:hydrogen", + "weight": 2 + }, + { + "chemical": "ragium:sulfate" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/water.json b/src/generated/resources/data/ragium/ragium/chemical/water.json new file mode 100644 index 000000000..eb92294e2 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/water.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:hydrogen", + "weight": 2 + }, + { + "element": "ragium:oxygen" + } + ] +} \ No newline at end of file diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTChemical.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTChemical.kt index 58cfcb7eb..2ee2134bd 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTChemical.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTChemical.kt @@ -4,6 +4,9 @@ import com.mojang.serialization.Codec import com.mojang.serialization.MapCodec import hiiragi283.lib.serialization.codec.HTCodecs import hiiragi283.lib.serialization.network.HTStreamCodecs +import hiiragi283.lib.text.HTHasText +import hiiragi283.lib.text.MutableText +import hiiragi283.lib.text.toText import hiiragi283.ragium.api.RagiumRegistries import net.minecraft.core.Holder import net.minecraft.network.RegistryFriendlyByteBuf @@ -15,7 +18,7 @@ import net.minecraft.network.codec.StreamCodec * @author Hiiragi Tsubasa * @since 26.1.8 */ -interface HTChemical { +interface HTChemical : HTHasText { companion object { @JvmField val DISPATCH_CODEC: Codec = @@ -59,6 +62,8 @@ interface HTChemical { fun getChemicalFormula(): String + override fun getText(): MutableText = this.getChemicalFormula().toText() + @JvmRecord data class Type(val codec: MapCodec, val streamCodec: StreamCodec) } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt index e5cc52eb8..183e4862f 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt @@ -60,12 +60,22 @@ data object RagiumChemicals { // Compounds // + // 1st Period + @JvmField + val HYDROXIDE: ResourceKey = create("hydroxide") + + @JvmField + val WATER: ResourceKey = create("water") + // 2nd Period @JvmField val NITRATE: ResourceKey = create("nitrate") @JvmField - val POTASSIUM_NITRATE: ResourceKey = create("potassium_nitrate") + val NITRIC_ACID: ResourceKey = create("nitric_acid") + + @JvmField + val HYDROGEN_FLUORIDE: ResourceKey = create("hydrogen_fluoride") @JvmField val FLUORITE: ResourceKey = create("fluorite") @@ -74,6 +84,9 @@ data object RagiumChemicals { val CRYOLITE: ResourceKey = create("cryolite") // 3rd Period + @JvmField + val SODIUM_HYDROXIDE: ResourceKey = create("sodium_hydroxide") + @JvmField val SODIUM_CHLORIDE: ResourceKey = create("sodium_chloride") @@ -83,9 +96,25 @@ data object RagiumChemicals { @JvmField val SILICON_DIOXIDE: ResourceKey = create("silicon_dioxide") + @JvmField + val SULFUR_DIOXIDE: ResourceKey = create("sulfur_dioxide") + + @JvmField + val SULFUR_TRIOXIDE: ResourceKey = create("sulfur_trioxide") + @JvmField val SULFATE: ResourceKey = create("sulfate") + @JvmField + val SULFURIC_ACID: ResourceKey = create("sulfuric_acid") + + @JvmField + val HYDROGEN_CHLORIDE: ResourceKey = create("hydrogen_chloride") + + // 4th Period + @JvmField + val POTASSIUM_NITRATE: ResourceKey = create("potassium_nitrate") + // Mixtures // @JvmStatic @@ -114,6 +143,21 @@ data object RagiumChemicals { context.register(GOLD, HTSimpleChemical(getter.getOrThrow(RagiumElements.GOLD), 1)) // Compounds + context.register( + HYDROXIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.OXYGEN, 1) + add(RagiumElements.HYDROGEN, 1) + } + ) + context.register( + WATER, + HTCompoundChemical.build(context) { + add(RagiumElements.HYDROGEN, 2) + add(RagiumElements.OXYGEN, 1) + } + ) + context.register( NITRATE, HTCompoundChemical.build(context) { @@ -122,12 +166,19 @@ data object RagiumChemicals { } ) context.register( - POTASSIUM_NITRATE, + NITRIC_ACID, HTCompoundChemical.build(context) { - add(RagiumElements.POTASSIUM, 1) + add(RagiumElements.NITROGEN, 1) add(NITRATE, 1) } ) + context.register( + HYDROGEN_FLUORIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.HYDROGEN, 1) + add(RagiumElements.FLUORINE, 1) + } + ) context.register( FLUORITE, HTCompoundChemical.build(context) { @@ -144,6 +195,13 @@ data object RagiumChemicals { } ) + context.register( + SODIUM_HYDROXIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.SODIUM, 1) + add(HYDROXIDE, 1) + } + ) context.register( SODIUM_CHLORIDE, HTCompoundChemical.build(context) { @@ -165,6 +223,20 @@ data object RagiumChemicals { add(RagiumElements.OXYGEN, 2) } ) + context.register( + SULFUR_DIOXIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.SULFUR, 1) + add(RagiumElements.OXYGEN, 2) + } + ) + context.register( + SULFUR_TRIOXIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.SULFUR, 1) + add(RagiumElements.OXYGEN, 3) + } + ) context.register( SULFATE, HTCompoundChemical.build(context) { @@ -172,5 +244,27 @@ data object RagiumChemicals { add(RagiumElements.OXYGEN, 4) } ) + context.register( + SULFURIC_ACID, + HTCompoundChemical.build(context) { + add(RagiumElements.HYDROGEN, 2) + add(SULFATE, 1) + } + ) + context.register( + HYDROGEN_CHLORIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.HYDROGEN, 1) + add(RagiumElements.CHLORINE, 1) + } + ) + + context.register( + POTASSIUM_NITRATE, + HTCompoundChemical.build(context) { + add(RagiumElements.POTASSIUM, 1) + add(NITRATE, 1) + } + ) } } diff --git a/src/libClient/kotlin/hiiragi283/ragium/api/data/chemical/HTClientChemicalHelper.kt b/src/libClient/kotlin/hiiragi283/ragium/api/data/chemical/HTClientChemicalHelper.kt new file mode 100644 index 000000000..8aefbfb37 --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/ragium/api/data/chemical/HTClientChemicalHelper.kt @@ -0,0 +1,25 @@ +package hiiragi283.ragium.api.data.chemical + +import hiiragi283.lib.resource.toLanguageKey +import hiiragi283.lib.text.Text +import hiiragi283.lib.text.translatableText +import hiiragi283.ragium.api.data.RagiumDataComponents +import net.minecraft.ChatFormatting +import net.minecraft.client.Minecraft +import net.minecraft.core.Holder +import net.minecraft.core.component.DataComponentGetter + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +data object HTClientChemicalHelper { + @JvmStatic + fun addToTooltip(getter: DataComponentGetter, acceptor: (Text) -> Unit) { + val holder: Holder = getter.get(RagiumDataComponents.CHEMICAL) ?: return + when { + Minecraft.getInstance().hasShiftDown() -> holder.key?.toLanguageKey()?.let(::translatableText) + else -> holder.value().getText() + }?.withStyle(ChatFormatting.YELLOW)?.let(acceptor) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index fac9ba633..eb5447ac2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -10,12 +10,17 @@ import hiiragi283.lib.recipe.RecipeKey import hiiragi283.lib.recipe.ingredient.HTPotionFluidIngredient import hiiragi283.lib.recipe.lookup.fromRecipeType import hiiragi283.lib.registry.HTFluidContent +import hiiragi283.lib.registry.createKey import hiiragi283.lib.registry.getKeyOrThrow import hiiragi283.lib.registry.getOrNull import hiiragi283.lib.resource.modifyPath +import hiiragi283.lib.resource.vanillaId import hiiragi283.lib.util.identity import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConstants +import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.api.data.chemical.HTChemical +import hiiragi283.ragium.api.data.chemical.RagiumChemicals import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders import hiiragi283.ragium.api.recipe.RagiumRecipeLookups import hiiragi283.ragium.api.recipe.RagiumRecipeTypes @@ -27,9 +32,12 @@ import hiiragi283.ragium.common.recipe.RTPotionBottleFillingRecipe import it.unimi.dsi.fastutil.objects.ObjectArrayList import net.minecraft.core.Holder import net.minecraft.core.HolderGetter +import net.minecraft.core.HolderLookup import net.minecraft.core.HolderSet import net.minecraft.core.RegistryAccess +import net.minecraft.core.component.DataComponentMap import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.core.registries.Registries import net.minecraft.resources.ResourceKey import net.minecraft.world.item.DyeColor import net.minecraft.world.item.alchemy.Potion @@ -50,6 +58,7 @@ import net.neoforged.neoforge.registries.datamaps.builtin.Waxable internal data object RagiumCommon { fun initialize(event: FMLCommonSetupEvent) { event.enqueueWork(::initFluidInteractions) + event.enqueueWork(::initFluidComponents) event.enqueueWork(::initRecipeLookups) } @@ -71,6 +80,40 @@ internal data object RagiumCommon { } } + private fun initFluidComponents() { + fun setChemical(content: HTFluidContent, key: ResourceKey) { + BuiltInRegistries.DATA_COMPONENT_INITIALIZERS.add( + content.keyOrThrow + ) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> + builder.set(RagiumDataComponents.CHEMICAL, provider.getOrThrow(key)) + } + } + + BuiltInRegistries.DATA_COMPONENT_INITIALIZERS.add( + Registries.FLUID.createKey(vanillaId("water")) + ) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> + builder.set(RagiumDataComponents.CHEMICAL, provider.getOrThrow(RagiumChemicals.WATER)) + } + + setChemical(RagiumFluids.MOLTEN_GLASS, RagiumChemicals.SILICON_DIOXIDE) + + setChemical(RagiumFluids.HYDROGEN, RagiumChemicals.HYDROGEN) + setChemical(RagiumFluids.OXYGEN, RagiumChemicals.OXYGEN) + setChemical(RagiumFluids.CHLORINE, RagiumChemicals.CHLORINE) + + setChemical(RagiumFluids.NITRIC_ACID, RagiumChemicals.NITRIC_ACID) + setChemical(RagiumFluids.HYDROGEN_FLUORIDE, RagiumChemicals.HYDROGEN_FLUORIDE) + setChemical(RagiumFluids.HYDROFLUORIC_ACID, RagiumChemicals.HYDROGEN_FLUORIDE) + + setChemical(RagiumFluids.NAOH_SOLUTION, RagiumChemicals.SODIUM_HYDROXIDE) + setChemical(RagiumFluids.ALUMINA_SOLUTION, RagiumChemicals.ALUMINA) + setChemical(RagiumFluids.SULFUR_DIOXIDE, RagiumChemicals.SULFUR_DIOXIDE) + setChemical(RagiumFluids.SULFUR_TRIOXIDE, RagiumChemicals.SULFUR_TRIOXIDE) + setChemical(RagiumFluids.SULFURIC_ACID, RagiumChemicals.SULFURIC_ACID) + setChemical(RagiumFluids.HYDROGEN_CHLORIDE, RagiumChemicals.HYDROGEN_CHLORIDE) + setChemical(RagiumFluids.HYDROCHLORIC_ACID, RagiumChemicals.HYDROGEN_CHLORIDE) + } + private fun initRecipeLookups() { // from recipe types RagiumRecipeLookups.ASSEMBLING.fromRecipeType(RagiumRecipeTypes.ASSEMBLING, identity()) diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index 74667d001..ca456043a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -9,22 +9,15 @@ 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.text.toText -import hiiragi283.lib.transfer.fluid.HTFluidView import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.RagiumDataComponents -import hiiragi283.ragium.api.data.chemical.HTChemical import hiiragi283.ragium.api.data.chemical.RagiumChemicals import hiiragi283.ragium.api.data.oreSlurry.RagiumOreSlurryData import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.api.tag.HTMachineType -import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.item.component.RagiumToolMaterials -import net.minecraft.ChatFormatting import net.minecraft.core.Holder import net.minecraft.core.HolderLookup import net.minecraft.core.component.DataComponentMap @@ -32,18 +25,13 @@ import net.minecraft.core.component.DataComponentType import net.minecraft.resources.ResourceKey import net.minecraft.world.item.HoneycombItem import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack import net.minecraft.world.item.Items import net.minecraft.world.item.Rarity import net.minecraft.world.level.ItemLike import net.neoforged.bus.api.IEventBus import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent -import net.neoforged.neoforge.common.tooltip.TooltipLocation import net.neoforged.neoforge.event.ModifyDefaultComponentsEvent -import net.neoforged.neoforge.event.RegisterTooltipAppendersEvent import net.neoforged.neoforge.transfer.access.ItemAccess -import net.neoforged.neoforge.transfer.fluid.FluidResource -import java.util.function.Consumer data object RagiumItems { @JvmField @@ -56,7 +44,6 @@ 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) @@ -247,56 +234,6 @@ data object RagiumItems { // 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) - } - event.registerAppender( - TooltipLocation.HEAD - ) { stack: ItemStack, _, _, _, _, builder: Consumer -> - val chemical: Holder = stack.get(RagiumDataComponents.CHEMICAL) ?: return@registerAppender - builder.accept(chemical.value().getChemicalFormula().toText().withStyle(ChatFormatting.YELLOW)) - } - } - @JvmStatic private fun registerCapabilities(event: RegisterCapabilitiesEvent) { // Fluid @@ -340,6 +277,15 @@ data object RagiumItems { setHolder(Items.GOLD_INGOT, RagiumDataComponents.CHEMICAL, RagiumChemicals.GOLD) setHolder(Items.GOLD_NUGGET, RagiumDataComponents.CHEMICAL, RagiumChemicals.GOLD) + setHolder(Items.SNOWBALL, RagiumDataComponents.CHEMICAL, RagiumChemicals.WATER) + setHolder(Items.SNOW_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.WATER) + setHolder(Items.ICE, RagiumDataComponents.CHEMICAL, RagiumChemicals.WATER) + setHolder(Items.PACKED_ICE, RagiumDataComponents.CHEMICAL, RagiumChemicals.WATER) + setHolder(Items.BLUE_ICE, RagiumDataComponents.CHEMICAL, RagiumChemicals.WATER) + + setHolder(Items.AMETHYST_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON_DIOXIDE) + setHolder(Items.AMETHYST_SHARD, RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON_DIOXIDE) + setHolder(Items.QUARTZ_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON_DIOXIDE) setHolder(Items.QUARTZ, RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON_DIOXIDE) // Ore Slurry From c0e8e3dd378cd5f5156d780388d2ee21e26ee38b Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 26 Sep 2026 15:37:55 +0900 Subject: [PATCH 04/14] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E3=80=8CFluid=20Output=20B?= =?UTF-8?q?us=20/=20=E6=B6=B2=E4=BD=93=E6=90=AC=E5=87=BA=E3=83=90=E3=82=B9?= =?UTF-8?q?=E3=80=8D=E3=82=92=E8=BF=BD=E5=8A=A0=20feat:=20Electrolyzer=20?= =?UTF-8?q?=E3=81=AB=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/lang/RagiumEnglishLangProvider.kt | 2 + .../data/lang/RagiumJapaneseLangProvider.kt | 2 + .../data/loot/RagiumBlockLootTableProvider.kt | 8 +- .../ragium/data/model/RagiumModelProvider.kt | 3 + .../recipe/RagiumVanillaRecipeProvider.kt | 7 + .../data/tag/RagiumBlockTagsProvider.kt | 2 + .../ragium/data/tag/RagiumItemTagsProvider.kt | 1 + .../ragium/blockstates/fluid_output_bus.json | 7 + .../assets/ragium/items/fluid_output_bus.json | 6 + .../resources/assets/ragium/lang/en_us.json | 1 + .../resources/assets/ragium/lang/ja_jp.json | 1 + .../ragium/models/block/fluid_output_bus.json | 8 + .../tags/block/mineable/pickaxe.json | 1 + .../loot_table/blocks/fluid_output_bus.json | 32 ++++ .../ragium/recipe/shaped/electrolyzer.json | 18 ++ .../recipe/shapeless/fluid_output_bus.json | 11 ++ .../ragium/tags/item/show_fluid_tooltips.json | 1 + .../lib/capability/HTMultiCapability.kt | 4 +- .../lib/recipe/handler/HTOutputSlot.kt | 9 +- .../lib/transfer/ExtendedResourceHandler.kt | 22 +++ .../lib/transfer/HTResourceHandler.kt | 23 ++- .../lib/transfer/fluid/HTBasicFluidTank.kt | 10 +- .../fluid/HTItemAccessFluidHandler.kt | 86 +++++++++ .../kotlin/hiiragi283/lib/util/HTDelegates.kt | 25 +++ .../api/recipe/RTElectrolyzingRecipe.kt | 7 +- .../ragium/common/block/RagiumBlocks.kt | 27 ++- .../block/entity/HTBaseMachineBlockEntity.kt | 4 + .../block/entity/RagiumBlockEntityTypes.kt | 15 ++ .../block/entity/bus/HTFluidBusBlock.kt | 36 ++++ .../machine/HTElectrolyzerBlockEntity.kt | 177 ++++++++++++++++++ .../base/HTItemAndFluidToFluidBlockEntity.kt | 12 +- .../base/HTItemAndFluidToItemBlockEntity.kt | 12 +- .../base/HTItemToDoubleItemBlockEntity.kt | 2 +- .../storage/HTCreativeTankBlockEntity.kt | 9 +- .../storage/HTFluidOutputBusBlockEntity.kt | 43 +++++ .../block/entity/storage/HTTankBlockEntity.kt | 9 +- .../storage/base/HTBaseTankBlockEntity.kt | 17 +- .../common/block/storage/HTTankBlock.kt | 31 +-- .../transfer/fluid/HTVariableFluidTank.kt | 10 +- 39 files changed, 606 insertions(+), 95 deletions(-) create mode 100644 src/generated/resources/assets/ragium/blockstates/fluid_output_bus.json create mode 100644 src/generated/resources/assets/ragium/items/fluid_output_bus.json create mode 100644 src/generated/resources/assets/ragium/models/block/fluid_output_bus.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/fluid_output_bus.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json create mode 100644 src/generated/resources/data/ragium/recipe/shapeless/fluid_output_bus.json create mode 100644 src/lib/kotlin/hiiragi283/lib/transfer/ExtendedResourceHandler.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTItemAccessFluidHandler.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/bus/HTFluidBusBlock.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTFluidOutputBusBlockEntity.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 5802091af..2d1b527ef 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -75,6 +75,8 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumBlocks.ENCHANTER, "Enchanter") + add(RagiumBlocks.FLUID_OUTPUT_BUS, "Fluid Output Bus") + 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 493eebce8..1ac6ceddc 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -71,6 +71,8 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumBlocks.ENCHANTER, "エンチャンター") + add(RagiumBlocks.FLUID_OUTPUT_BUS, "液体搬出バス") + add(RagiumBlocks.TANK, "可変タンク") add(RagiumBlocks.VOID_TANK, "廃棄タンク") add(RagiumBlocks.CREATIVE_BATTERY, "クリエイティブ用バッテリー") diff --git a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt index 684f271ff..866a0204d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt @@ -43,8 +43,12 @@ class RagiumBlockLootTableProvider(registries: HolderLookup.Provider) : add(machine, ::copyComponent) } // Storage - for (tank: HTSimpleDeferredBlockAndItem in listOf(RagiumBlocks.TANK, RagiumBlocks.CREATIVE_TANK)) { - add(tank) { block: Block -> copyComponent(block) { include(RagiumDataComponents.FLUID) } } + listOf( + RagiumBlocks.FLUID_OUTPUT_BUS, + RagiumBlocks.TANK, + RagiumBlocks.CREATIVE_TANK + ).forEach { blockItem: HTSimpleDeferredBlockAndItem -> + add(blockItem) { block: Block -> copyComponent(block) { include(RagiumDataComponents.FLUID) } } } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt index 450da341d..b2f72d3fe 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt @@ -23,6 +23,7 @@ import net.minecraft.client.data.models.blockstates.PropertyDispatch import net.minecraft.client.data.models.model.ModelTemplates import net.minecraft.client.data.models.model.TextureMapping import net.minecraft.client.data.models.model.TextureSlot +import net.minecraft.client.data.models.model.TexturedModel import net.minecraft.client.resources.model.sprite.Material import net.minecraft.data.PackOutput import net.minecraft.resources.Identifier @@ -125,6 +126,8 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP ) ) } + // Bus + generators.createTrivialBlock(RagiumBlocks.FLUID_OUTPUT_BUS.getOrThrow(), TexturedModel.CUBE_TOP_BOTTOM) // Storage generators.createTrivialBlock(RagiumBlocks.TANK.getOrThrow(), HTModelTemplates.Providers.TANK_TEMPLATE) generators.createTrivialBlock(RagiumBlocks.VOID_TANK.getOrThrow(), HTModelTemplates.Providers.TANK_TEMPLATE) diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 08d6b9fbc..869bfc41e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -282,6 +282,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut heat(RagiumBlocks.SMELTER) { items { +Items.FURNACE } } // Chemical chemical(RagiumBlocks.CHEMICAL_BATH) { items { +Items.CAULDRON } } + chemical(RagiumBlocks.ELECTROLYZER) { +holderSet(ItemTags.LIGHTNING_RODS) } chemical(RagiumBlocks.MIXER) { +holderSet(Tags.Items.BUCKETS_EMPTY) } // Bio bio(RagiumBlocks.BREWERY) { items { +Items.BREWING_STAND } } @@ -291,6 +292,12 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut // Arcane arcane(RagiumBlocks.ENCHANTER) { items { +Items.ENCHANTING_TABLE } } + // Bus + VanillaRecipeBuilders.shapeless { + ingredient { items { +RagiumBlocks.MACHINE_CASING } } + ingredient { items { +RagiumBlocks.TANK } } + result { +RagiumBlocks.FLUID_OUTPUT_BUS } + }.save(exporter) // Decoration VanillaRecipeBuilders.shaped { +"ABA" diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt index a458c40f2..b3a767364 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt @@ -37,6 +37,8 @@ class RagiumBlockTagsProvider(output: PackOutput, lookupProvider: CompletableFut yield(RagiumBlocks.MACHINE_CASING) yieldAll(RagiumBlocks.MACHINE_CASINGS.values) + yield(RagiumBlocks.FLUID_OUTPUT_BUS) + yield(RagiumBlocks.TANK) yield(RagiumBlocks.VOID_TANK) yield(RagiumBlocks.CREATIVE_BATTERY) diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index 42c47d2e5..23f971ba4 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -83,6 +83,7 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu .addTag(HTCommonTags.Items.COAL_COKE) .addTag(HTCommonTags.Items.PITCH_COKE) builder(RagiumTags.Items.SHOW_FLUID_TOOLTIPS) + .add(RagiumBlocks.FLUID_OUTPUT_BUS) .add(RagiumBlocks.TANK) .add(RagiumBlocks.VOID_TANK) .add(RagiumBlocks.CREATIVE_TANK) diff --git a/src/generated/resources/assets/ragium/blockstates/fluid_output_bus.json b/src/generated/resources/assets/ragium/blockstates/fluid_output_bus.json new file mode 100644 index 000000000..ffc971ded --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/fluid_output_bus.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/fluid_output_bus" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/fluid_output_bus.json b/src/generated/resources/assets/ragium/items/fluid_output_bus.json new file mode 100644 index 000000000..ff3f8e7a2 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/fluid_output_bus.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/fluid_output_bus" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index d70a25938..916429d5a 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -54,6 +54,7 @@ "block.ragium.electrolyzer": "Electrolyzer", "block.ragium.electronics_machine_casing": "Machine Casing (Electronics)", "block.ragium.enchanter": "Enchanter", + "block.ragium.fluid_output_bus": "Fluid Output Bus", "block.ragium.fluorite_block": "Block of Fluorite", "block.ragium.fluorite_slab": "Fluorite Slab", "block.ragium.fluorite_stairs": "Fluorite Stairs", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index b8f9c1ce9..c2e43c512 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -54,6 +54,7 @@ "block.ragium.electrolyzer": "電解機", "block.ragium.electronics_machine_casing": "機械筐体 (電子)", "block.ragium.enchanter": "エンチャンター", + "block.ragium.fluid_output_bus": "液体搬出バス", "block.ragium.fluorite_block": "蛍石ブロック", "block.ragium.fluorite_slab": "蛍石のハーフブロック", "block.ragium.fluorite_stairs": "蛍石の階段", diff --git a/src/generated/resources/assets/ragium/models/block/fluid_output_bus.json b/src/generated/resources/assets/ragium/models/block/fluid_output_bus.json new file mode 100644 index 000000000..bd83ffe6c --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/fluid_output_bus.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "ragium:block/fluid_output_bus_bottom", + "side": "ragium:block/fluid_output_bus_side", + "top": "ragium:block/fluid_output_bus_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 40996203d..495774f84 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -26,6 +26,7 @@ "ragium:electrolyzer", "ragium:electronics_machine_casing", "ragium:enchanter", + "ragium:fluid_output_bus", "ragium:fluorite_block", "ragium:fluorite_slab", "ragium:fluorite_stairs", diff --git a/src/generated/resources/data/ragium/loot_table/blocks/fluid_output_bus.json b/src/generated/resources/data/ragium/loot_table/blocks/fluid_output_bus.json new file mode 100644 index 000000000..689aeadd8 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/fluid_output_bus.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id", + "ragium:fluid" + ], + "source": "block_entity" + } + ], + "name": "ragium:fluid_output_bus" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/fluid_output_bus" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json b/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json new file mode 100644 index 000000000..4a3c27412 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:nuggets/black_steel", + "B": "ragium:chemical_machine_parts", + "C": "#c:gears/gold", + "D": "#minecraft:lightning_rods" + }, + "pattern": [ + "ABA", + "BCB", + "ADA" + ], + "result": { + "id": "ragium:electrolyzer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shapeless/fluid_output_bus.json b/src/generated/resources/data/ragium/recipe/shapeless/fluid_output_bus.json new file mode 100644 index 000000000..fc3c8348e --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shapeless/fluid_output_bus.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + "ragium:machine_casing", + "ragium:tank" + ], + "result": { + "id": "ragium:fluid_output_bus" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/item/show_fluid_tooltips.json b/src/generated/resources/data/ragium/tags/item/show_fluid_tooltips.json index 29217b0ff..a056d1d15 100644 --- a/src/generated/resources/data/ragium/tags/item/show_fluid_tooltips.json +++ b/src/generated/resources/data/ragium/tags/item/show_fluid_tooltips.json @@ -1,6 +1,7 @@ { "values": [ "ragium:creative_tank", + "ragium:fluid_output_bus", "ragium:tank", "ragium:void_tank" ] diff --git a/src/lib/kotlin/hiiragi283/lib/capability/HTMultiCapability.kt b/src/lib/kotlin/hiiragi283/lib/capability/HTMultiCapability.kt index 61d6e8679..ddf19ac3b 100644 --- a/src/lib/kotlin/hiiragi283/lib/capability/HTMultiCapability.kt +++ b/src/lib/kotlin/hiiragi283/lib/capability/HTMultiCapability.kt @@ -42,9 +42,7 @@ interface HTMultiCapability { level: ServerLevel, pos: BlockPos, side: Direction?, - validator: BooleanSupplier = BooleanSupplier { - true - }, + validator: BooleanSupplier = BooleanSupplier { true }, listener: Runnable = Runnables.doNothing() ): BlockCapabilityCache = BlockCapabilityCache.create(block, level, pos, side, validator, listener) diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt index a9d29fa58..e5d723d18 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt @@ -40,13 +40,8 @@ interface HTOutputSlot { FULL; /** - * 出力の受け取りに失敗した場合は`true` + * 出力をすべて受け取れた場合は`true` */ - val noneTaken: Boolean get() = this == NONE - - /** - * 出力の受け取りに成功した場合は`true` - */ - val anyTaken: Boolean get() = !noneTaken + val fullOrNoneTaken: Boolean get() = this == NONE || this == FULL } } diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/ExtendedResourceHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/ExtendedResourceHandler.kt new file mode 100644 index 000000000..e90060bc3 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/transfer/ExtendedResourceHandler.kt @@ -0,0 +1,22 @@ +package hiiragi283.lib.transfer + +import net.neoforged.neoforge.transfer.ResourceHandler +import net.neoforged.neoforge.transfer.resource.Resource +import net.neoforged.neoforge.transfer.transaction.TransactionContext + +/** + * Ragiumで使用される[ResourceHandler]の拡張インターフェースです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +interface ExtendedResourceHandler : ResourceHandler { + fun insert(index: Int, resource: T, amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int + + override fun insert(index: Int, resource: T, amount: Int, transaction: TransactionContext): Int = + insert(index, resource, amount, transaction, HTTransferAccess.EXTERNAL) + + fun extract(index: Int, resource: T, amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int + + override fun extract(index: Int, resource: T, amount: Int, transaction: TransactionContext): Int = + extract(index, resource, amount, transaction, HTTransferAccess.EXTERNAL) +} diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceHandler.kt index 2a68161b2..7c07b7a0b 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceHandler.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceHandler.kt @@ -1,10 +1,9 @@ package hiiragi283.lib.transfer -import net.neoforged.neoforge.transfer.ResourceHandler import net.neoforged.neoforge.transfer.resource.Resource import net.neoforged.neoforge.transfer.transaction.TransactionContext -class HTResourceHandler(val slots: List>) : ResourceHandler { +class HTResourceHandler(val slots: List>) : ExtendedResourceHandler { fun getSlot(index: Int): HTResourceSlot = slots[index] override fun size(): Int = slots.size @@ -23,9 +22,19 @@ class HTResourceHandler(val slots: List>) : Reso override fun isValid(index: Int, resource: T): Boolean = getSlot(index).isValid(resource) - override fun insert(index: Int, resource: T, amount: Int, transaction: TransactionContext): Int = - getSlot(index).insert(resource, amount, transaction, HTTransferAccess.EXTERNAL) - - override fun extract(index: Int, resource: T, amount: Int, transaction: TransactionContext): Int = - getSlot(index).extract(resource, amount, transaction, HTTransferAccess.EXTERNAL) + override fun insert( + index: Int, + resource: T, + amount: Int, + transaction: TransactionContext, + access: HTTransferAccess + ): Int = getSlot(index).insert(resource, amount, transaction, access) + + override fun extract( + index: Int, + resource: T, + amount: Int, + transaction: TransactionContext, + access: HTTransferAccess + ): Int = getSlot(index).extract(resource, amount, transaction, access) } diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTBasicFluidTank.kt b/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTBasicFluidTank.kt index 0e49b5936..3b7276d93 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTBasicFluidTank.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTBasicFluidTank.kt @@ -36,9 +36,13 @@ open class HTBasicFluidTank( listener: Runnable?, canInsert: Predicate = HTTransferPredicates.alwaysTrue(), filter: Predicate = canInsert - ): HTBasicFluidTank = create(capacity, listener, HTTransferPredicates.notExternal(), { resource, _ -> - canInsert.test(resource) - }, filter) + ): HTBasicFluidTank = create( + capacity, + listener, + HTTransferPredicates.notExternal(), + { resource: FluidResource, _ -> canInsert.test(resource) }, + filter + ) @JvmStatic fun output(capacity: Int, listener: Runnable?): HTBasicFluidTank = diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTItemAccessFluidHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTItemAccessFluidHandler.kt new file mode 100644 index 000000000..35e7e5d15 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTItemAccessFluidHandler.kt @@ -0,0 +1,86 @@ +package hiiragi283.lib.transfer.fluid + +import hiiragi283.lib.transfer.ExtendedResourceHandler +import hiiragi283.lib.transfer.HTTransferAccess +import hiiragi283.lib.transfer.HTTransferPredicates +import hiiragi283.ragium.api.data.RagiumDataComponents +import net.neoforged.neoforge.transfer.access.ItemAccess +import net.neoforged.neoforge.transfer.fluid.FluidResource +import net.neoforged.neoforge.transfer.fluid.ItemAccessFluidHandler +import net.neoforged.neoforge.transfer.transaction.TransactionContext +import java.util.function.BiPredicate +import java.util.function.Predicate + +/** + * Ragiumで使用される[ItemAccessFluidHandler]の拡張クラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +class HTItemAccessFluidHandler( + itemAccess: ItemAccess, + capacity: Int, + private val canExtract: BiPredicate, + private val canInsert: BiPredicate, + private val filter: Predicate +) : ItemAccessFluidHandler(itemAccess, RagiumDataComponents.FLUID, capacity), + ExtendedResourceHandler { + companion object { + @JvmStatic + fun create( + itemAccess: ItemAccess, + capacity: Int, + canExtract: BiPredicate = HTTransferPredicates.alwaysTrueBi(), + canInsert: BiPredicate = HTTransferPredicates.alwaysTrueBi(), + filter: Predicate = HTTransferPredicates.alwaysTrue() + ): HTItemAccessFluidHandler = HTItemAccessFluidHandler(itemAccess, capacity, canExtract, canInsert, filter) + + @JvmStatic + fun input( + itemAccess: ItemAccess, + capacity: Int, + canInsert: Predicate = HTTransferPredicates.alwaysTrue(), + filter: Predicate = canInsert + ): HTItemAccessFluidHandler = create( + itemAccess, + capacity, + HTTransferPredicates.notExternal(), + { resource: FluidResource, _ -> canInsert.test(resource) }, + filter + ) + + @JvmStatic + fun output(itemAccess: ItemAccess, capacity: Int): HTItemAccessFluidHandler = + create(itemAccess, capacity, canInsert = HTTransferPredicates.internalOnly()) + } + + override fun insert( + index: Int, + resource: FluidResource, + amount: Int, + transaction: TransactionContext, + access: HTTransferAccess + ): Int = when { + canInsert.test(resource, access) -> super.insert(index, resource, amount, transaction) + else -> 0 + } + + override fun extract( + index: Int, + resource: FluidResource, + amount: Int, + transaction: TransactionContext, + access: HTTransferAccess + ): Int = when { + canExtract.test(resource, access) -> super.extract(index, resource, amount, transaction) + else -> 0 + } + + override fun isValid(index: Int, resource: FluidResource): Boolean = + super.isValid(index, resource) && filter.test(resource) + + override fun insert(index: Int, resource: FluidResource, amount: Int, transaction: TransactionContext): Int = + this.insert(index, resource, amount, transaction, HTTransferAccess.EXTERNAL) + + override fun extract(index: Int, resource: FluidResource, amount: Int, transaction: TransactionContext): Int = + this.extract(index, resource, amount, transaction, HTTransferAccess.EXTERNAL) +} diff --git a/src/lib/kotlin/hiiragi283/lib/util/HTDelegates.kt b/src/lib/kotlin/hiiragi283/lib/util/HTDelegates.kt index cdf75dd9e..e545fbdb0 100644 --- a/src/lib/kotlin/hiiragi283/lib/util/HTDelegates.kt +++ b/src/lib/kotlin/hiiragi283/lib/util/HTDelegates.kt @@ -63,4 +63,29 @@ data object HTDelegates { setter.accept(value) } } + + /** + * @since 26.1.8 + */ + fun memoizeNotNull(supplier: () -> T?): ReadWriteProperty = MemoizeNotNull(supplier) + + private class MemoizeNotNull(private val supplier: () -> T?) : ReadWriteProperty { + private var cachedValue: T? = null + + override fun getValue(thisRef: Any?, property: KProperty<*>): T? { + if (cachedValue != null) { + return cachedValue + } else { + val value: T? = supplier() + if (value != null) { + cachedValue = value + } + return value + } + } + + override fun setValue(thisRef: Any?, property: KProperty<*>, value: T?) { + cachedValue = value + } + } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt index 9c2f74268..4fdd7020e 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt @@ -36,7 +36,7 @@ data class RTElectrolyzingRecipe( val results: Nel, override val progressData: HTProgressData ) : HTRecipePredicates.ItemAndFluid, - HTRecipeFactories.ItemAndFluid>, + HTRecipeFactories.ItemAndFluid, HTProgressRecipe.Simple, HTSerializableRecipe { companion object { @@ -81,7 +81,7 @@ data class RTElectrolyzingRecipe( fluidIngredient.getMatchingStack(second) ) - override fun apply(first: ItemInstance, second: FluidInstance): Triple = Triple( + override fun apply(first: ItemInstance, second: FluidInstance): ElectrolyzedResult = ElectrolyzedResult( results.head.create(), results.getOrNull(1).createOrEmpty(), results.getOrNull(2).createOrEmpty() @@ -90,4 +90,7 @@ data class RTElectrolyzingRecipe( override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.ELECTROLYZING override fun getType(): HTRecipeType = RagiumRecipeTypes.ELECTROLYZING + + @JvmRecord + data class ElectrolyzedResult(val right: FluidStack, val left: FluidStack, val main: FluidStack) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 32a5e4163..38eca5719 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -15,6 +15,7 @@ import hiiragi283.lib.registry.HTDeferredBlockEntityType import hiiragi283.lib.registry.HTDeferredBlockRegister import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem import hiiragi283.lib.registry.ItemWithContextFactory +import hiiragi283.lib.transfer.fluid.HTItemAccessFluidHandler import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConfig import hiiragi283.ragium.api.RagiumConstants @@ -27,6 +28,7 @@ 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.entity.bus.HTFluidBusBlock import hiiragi283.ragium.common.block.storage.HTTankBlock import hiiragi283.ragium.common.block.storage.HTVoidTankBlock import hiiragi283.ragium.common.item.block.HTCreativeTankBlockItem @@ -52,7 +54,6 @@ import net.neoforged.neoforge.event.ModifyDefaultComponentsEvent import net.neoforged.neoforge.transfer.InfiniteResourceHandler import net.neoforged.neoforge.transfer.energy.InfiniteEnergyHandler import net.neoforged.neoforge.transfer.fluid.FluidResource -import net.neoforged.neoforge.transfer.fluid.ItemAccessFluidHandler data object RagiumBlocks { @JvmStatic @@ -289,7 +290,7 @@ data object RagiumBlocks { @JvmField val ELECTROLYZER: HTBasicDeferredBlockAndItem = - registerFakeMachine(RagiumConstants.ELECTROLYZER) + registerMachine(RagiumBlockEntityTypes.ELECTROLYZER) @JvmField val MIXER: HTBasicDeferredBlockAndItem = @@ -350,6 +351,14 @@ data object RagiumBlocks { } ) + // Bus // + + @JvmField + val FLUID_OUTPUT_BUS: HTBasicDeferredBlockAndItem = registerMachine( + RagiumBlockEntityTypes.FLUID_OUTPUT_BUS, + ::HTFluidBusBlock + ) + // Storage // @JvmField @@ -402,11 +411,15 @@ data object RagiumBlocks { event.registerItem( HTFluidCapabilities.item, { _, access -> - ItemAccessFluidHandler( - access, - RagiumDataComponents.FLUID, - RagiumConfig.SERVER.tankCapacity.asInt - ) + HTItemAccessFluidHandler.output(access, RagiumConfig.SERVER.tankCapacity.asInt) + }, + FLUID_OUTPUT_BUS + ) + + event.registerItem( + HTFluidCapabilities.item, + { _, access -> + HTItemAccessFluidHandler.create(access, RagiumConfig.SERVER.tankCapacity.asInt) }, TANK ) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt index aff07609d..2fb94841b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt @@ -7,8 +7,10 @@ import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.transfer.fluid.HTBasicFluidTank import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.common.block.HTHorizontalEntityBlock import hiiragi283.ragium.common.block.HTMachineBlock import net.minecraft.core.BlockPos +import net.minecraft.core.Direction import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.block.state.BlockState @@ -19,6 +21,8 @@ abstract class HTBaseMachineBlockEntity(type: BlockEntityType<*>, pos: BlockPos, HTBlockEntityWithMenu { protected fun getTankCapacity(): IntSupplier = RagiumConfig.SERVER.machine.tankCapacity + fun getFront(): Direction = this.blockState.getValue(HTHorizontalEntityBlock.FACING) + fun isActive(): Boolean = isActive(this.blockState) fun isActive(state: BlockState): Boolean = state.getOptionalValue(HTMachineBlock.IS_ACTIVE).orElseGet { false } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt index d354f3c0e..d5f311c60 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -19,6 +19,7 @@ import hiiragi283.ragium.common.block.entity.machine.HTChemicalBathBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCompressorBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCrusherBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCuttingMachineBlockEntity +import hiiragi283.ragium.common.block.entity.machine.HTElectrolyzerBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTEnchanterBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTFreezerBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTMelterBlockEntity @@ -29,6 +30,7 @@ import hiiragi283.ragium.common.block.entity.machine.HTProcessorBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTSmelterBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCreativeBatteryBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCreativeTankBlockEntity +import hiiragi283.ragium.common.block.entity.storage.HTFluidOutputBusBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity import hiiragi283.ragium.common.block.storage.HTVoidTankBlock import net.minecraft.core.Direction @@ -98,6 +100,10 @@ data object RagiumBlockEntityTypes { val CHEMICAL_BATH: HTDeferredBlockEntityType = registerTick(RagiumConstants.CHEMICAL_BATH, ::HTChemicalBathBlockEntity) + @JvmField + val ELECTROLYZER: HTDeferredBlockEntityType = + registerTick(RagiumConstants.ELECTROLYZER, ::HTElectrolyzerBlockEntity) + @JvmField val MIXER: HTDeferredBlockEntityType = registerTick(RagiumConstants.MIXER, ::HTMixerBlockEntity) @@ -121,6 +127,12 @@ data object RagiumBlockEntityTypes { val ENCHANTER: HTDeferredBlockEntityType = registerTick(RagiumConstants.ENCHANTER, ::HTEnchanterBlockEntity) + // Bus // + + @JvmField + val FLUID_OUTPUT_BUS: HTDeferredBlockEntityType = + registerTick("fluid_output_bus", ::HTFluidOutputBusBlockEntity) + // Storage // @JvmField @@ -177,6 +189,7 @@ data object RagiumBlockEntityTypes { registerProcessor(SMELTER.get()) registerProcessor(CHEMICAL_BATH.get()) + registerProcessor(ELECTROLYZER.get()) registerProcessor(MIXER.get()) registerProcessor(BREWERY.get()) @@ -185,6 +198,8 @@ data object RagiumBlockEntityTypes { registerProcessor(PRECISION_ASSEMBLER.get()) registerProcessor(ENCHANTER.get()) + // Bus + registerBlockEntity(FLUID_OUTPUT_BUS.get()) // Storage registerBlockEntity(TANK.get()) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/bus/HTFluidBusBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/bus/HTFluidBusBlock.kt new file mode 100644 index 000000000..3345e3024 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/bus/HTFluidBusBlock.kt @@ -0,0 +1,36 @@ +package hiiragi283.ragium.common.block.entity.bus + +import hiiragi283.lib.registry.HTDeferredBlockEntityType +import hiiragi283.ragium.common.block.HTBasicEntityBlock +import net.minecraft.core.BlockPos +import net.minecraft.world.InteractionHand +import net.minecraft.world.InteractionResult +import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.phys.BlockHitResult +import net.neoforged.neoforge.transfer.fluid.FluidUtil + +open class HTFluidBusBlock(type: HTDeferredBlockEntityType<*>, properties: Properties) : + HTBasicEntityBlock(type, properties) { + override fun useItemOn( + itemStack: ItemStack, + state: BlockState, + level: Level, + pos: BlockPos, + player: Player, + hand: InteractionHand, + hitResult: BlockHitResult + ): InteractionResult { + val result: InteractionResult = super.useItemOn(itemStack, state, level, pos, player, hand, hitResult) + if (itemStack.isEmpty) return result + if (!player.isShiftKeyDown) { + val moved: Boolean = FluidUtil.interactWithFluidHandler(player, hand, level, pos, hitResult.direction, null) + if (moved) { + return InteractionResult.SUCCESS + } + } + return result + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt new file mode 100644 index 000000000..e5df85222 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt @@ -0,0 +1,177 @@ +package hiiragi283.ragium.common.block.entity.machine + +import hiiragi283.lib.HTConstants +import hiiragi283.lib.gui.HTBackgroundType +import hiiragi283.lib.gui.HTSlotHelper +import hiiragi283.lib.gui.widget.HTWidgetHolder +import hiiragi283.lib.recipe.handler.HTFluidInputTank +import hiiragi283.lib.recipe.handler.HTItemInputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper +import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.lookup.HTRecipeCache +import hiiragi283.lib.transfer.fluid.HTBasicFluidTank +import hiiragi283.lib.transfer.item.HTBasicItemSlot +import hiiragi283.lib.transfer.useTransaction +import hiiragi283.lib.world.getTypedBlockEntity +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.config.HTEnergyConfig +import hiiragi283.ragium.api.recipe.RTElectrolyzingRecipe +import hiiragi283.ragium.api.recipe.RagiumRecipeLookups +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.entity.storage.HTFluidOutputBusBlockEntity +import hiiragi283.ragium.common.gui.widget.HTFluidWidget +import hiiragi283.ragium.common.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.core.Direction +import net.minecraft.server.level.ServerLevel +import net.minecraft.sounds.SoundEvents +import net.minecraft.world.item.ItemInstance +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.storage.ValueInput +import net.minecraft.world.level.storage.ValueOutput +import net.neoforged.neoforge.fluids.FluidInstance +import net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.transfer.transaction.Transaction + +class HTElectrolyzerBlockEntity(pos: BlockPos, state: BlockState) : + HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.ELECTROLYZER.get(), pos, state) { + private val cache: HTRecipeCache = + HTRecipeCache(RagiumRecipeLookups.ELECTROLYZING) + + override fun writeValue(output: ValueOutput) { + super.writeValue(output) + output.putChild(HTConstants.LAST_RECIPE, cache) + } + + override fun readValue(input: ValueInput) { + super.readValue(input) + input.readChild(HTConstants.LAST_RECIPE, cache) + } + + override fun initializeVariables(listener: Runnable) { + super.initializeVariables(listener) + recipeHandler = object : EnergizedHandler< + HTItemAndFluidRecipeInput, + RTElectrolyzingRecipe.ElectrolyzedResult, + RTElectrolyzingRecipe + >() { + private val machine: HTElectrolyzerBlockEntity = this@HTElectrolyzerBlockEntity + private val front: Direction get() = machine.getFront() + private val inputTank: HTFluidInputTank by lazy { HTFluidInputTank(machine.inputTank) } + private val inputSlot: HTItemInputSlot by lazy { HTItemInputSlot(machine.inputSlot) } + + private val outputTank: HTOutputSlot by lazy { HTOutputSlotHelper.forFluid(machine.outputTank) } + private val rightOutputTank: HTOutputSlot? get() = level + ?.getTypedBlockEntity(blockPos.relative(front.clockWise)) + ?.tank + ?.let(HTOutputSlotHelper::forFluid) + private val leftOutputTank: HTOutputSlot? get() = level + ?.getTypedBlockEntity(blockPos.relative(front.counterClockWise)) + ?.tank + ?.let(HTOutputSlotHelper::forFluid) + + override fun createInput(): HTItemAndFluidRecipeInput = + HTItemAndFluidRecipeInput(inputSlot.getStoredInput(), inputTank.getStoredInput()) + + override fun findRecipe(level: ServerLevel, input: HTItemAndFluidRecipeInput): RTElectrolyzingRecipe? = + cache.findFirstRecipe(input, level) + + override fun canComplete( + recipe: RTElectrolyzingRecipe, + input: HTItemAndFluidRecipeInput, + output: RTElectrolyzingRecipe.ElectrolyzedResult + ): Boolean = + rightOutputTank != null && leftOutputTank != null && 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 -> { + val (right: FluidStack, left: FluidStack, main: FluidStack) = output + when { + rightOutputTank!!.take(right, transaction) != HTOutputSlot.TakeResult.FULL -> false + leftOutputTank!!.take(left, transaction) != HTOutputSlot.TakeResult.FULL -> false + else -> outputTank.take(main, transaction).fullOrNoneTaken + } + } + } + } + + override fun onComplete( + recipe: RTElectrolyzingRecipe, + input: HTItemAndFluidRecipeInput, + output: RTElectrolyzingRecipe.ElectrolyzedResult + ) { + useTransaction { transaction: Transaction -> + val (itemInput: ItemInstance, fluidInput: FluidInstance) = + recipe.getMatchingStack(input.item, input.fluid) + inputSlot.use(itemInput, transaction) + inputTank.use(fluidInput, transaction) + val (right: FluidStack, left: FluidStack, main: FluidStack) = output + outputTank.take(main, transaction) + rightOutputTank?.take(right, transaction) + leftOutputTank?.take(left, transaction) + transaction.commit() + } + playSound(SoundEvents.FIREWORK_ROCKET_TWINKLE) + } + } + } + + private lateinit var inputTank: HTBasicFluidTank + private lateinit var outputTank: HTBasicFluidTank + + override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { + inputTank = builder.addSlot(HTSlotInfo.INPUT, HTVariableFluidTank.input(getTankCapacity(), listener)) + outputTank = builder.addSlot(HTSlotInfo.OUTPUT, HTVariableFluidTank.output(getTankCapacity(), listener)) + } + + 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) + } + + override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.electrolyzer +} 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 2de31fd35..42069ac88 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt @@ -83,10 +83,8 @@ abstract class HTItemAndFluidToFluidBlockEntity( input: HTItemAndFluidRecipeInput, output: FluidStack ): Boolean = useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( - input.item, - input.fluid - ) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = + recipe.getMatchingStack(input.item, input.fluid) when { inputSlot.use(itemInput, transaction).failed -> false inputTank.use(fluidInput, transaction).failed -> false @@ -100,10 +98,8 @@ abstract class HTItemAndFluidToFluidBlockEntity( output: FluidStack ) { useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( - input.item, - input.fluid - ) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = + recipe.getMatchingStack(input.item, input.fluid) inputSlot.use(itemInput, transaction) inputTank.use(fluidInput, transaction) outputTank.take(output, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt index 3c6b7d037..313f51698 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt @@ -80,10 +80,8 @@ abstract class HTItemAndFluidToItemBlockEntity( input: HTItemAndFluidRecipeInput, output: ItemStack ): Boolean = useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( - input.item, - input.fluid - ) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = + recipe.getMatchingStack(input.item, input.fluid) when { inputSlot.use(itemInput, transaction).failed -> false inputTank.use(fluidInput, transaction).failed -> false @@ -97,10 +95,8 @@ abstract class HTItemAndFluidToItemBlockEntity( output: ItemStack ) { useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( - input.item, - input.fluid - ) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = + recipe.getMatchingStack(input.item, input.fluid) inputSlot.use(itemInput, transaction) inputTank.use(fluidInput, transaction) outputSlot.take(output, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToDoubleItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToDoubleItemBlockEntity.kt index 511f0332f..5c2f676b1 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToDoubleItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToDoubleItemBlockEntity.kt @@ -79,7 +79,7 @@ abstract class HTItemToDoubleItemBlockEntity( when { inputSlot.use(inputConsume, transaction).failed -> false primarySlot.take(output.first, transaction) != HTOutputSlot.TakeResult.FULL -> false - else -> secondarySlot.take(output.second, transaction) == HTOutputSlot.TakeResult.FULL + else -> secondarySlot.take(output.second, transaction).fullOrNoneTaken } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCreativeTankBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCreativeTankBlockEntity.kt index 19aa9a1a6..20b475604 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCreativeTankBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCreativeTankBlockEntity.kt @@ -4,6 +4,8 @@ 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 hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.transfer.holder.HTSlotInfo import net.minecraft.core.BlockPos import net.minecraft.core.component.DataComponentGetter import net.minecraft.core.component.DataComponentMap @@ -13,9 +15,12 @@ import net.neoforged.neoforge.transfer.fluid.FluidResource class HTCreativeTankBlockEntity(pos: BlockPos, state: BlockState) : HTBaseTankBlockEntity(RagiumBlockEntityTypes.CREATIVE_TANK.get(), pos, state) { - override val tank: HTCreativeFluidTank = HTCreativeFluidTank() + override lateinit var tank: HTCreativeFluidTank + private set - override fun initTank(listener: Runnable) {} + override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { + tank = builder.addSlot(HTSlotInfo.INPUT, HTCreativeFluidTank()) + } // Sync // diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTFluidOutputBusBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTFluidOutputBusBlockEntity.kt new file mode 100644 index 000000000..00b1ba7ae --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTFluidOutputBusBlockEntity.kt @@ -0,0 +1,43 @@ +package hiiragi283.ragium.common.block.entity.storage + +import hiiragi283.lib.transfer.fluid.HTBasicFluidTank +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.entity.storage.base.HTBaseTankBlockEntity +import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank +import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.transfer.holder.HTSlotInfo +import net.minecraft.core.BlockPos +import net.minecraft.core.component.DataComponentGetter +import net.minecraft.core.component.DataComponentMap +import net.minecraft.world.level.block.state.BlockState +import net.neoforged.neoforge.fluids.SimpleFluidContent + +class HTFluidOutputBusBlockEntity(pos: BlockPos, state: BlockState) : + HTBaseTankBlockEntity(RagiumBlockEntityTypes.FLUID_OUTPUT_BUS.get(), pos, state) { + override lateinit var tank: HTBasicFluidTank + private set + + override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { + tank = builder.addSlot( + HTSlotInfo.OUTPUT, + HTVariableFluidTank.output(RagiumConfig.SERVER.tankCapacity, listener) + ) + } + + // Sync // + + override fun applyImplicitComponents(components: DataComponentGetter) { + super.applyImplicitComponents(components) + components.get(RagiumDataComponents.FLUID)?.copy()?.let(tank::setStack) + } + + override fun collectImplicitComponents(components: DataComponentMap.Builder) { + super.collectImplicitComponents(components) + val content: SimpleFluidContent = tank.getStackCopy().let(SimpleFluidContent::copyOf) + if (!content.isEmpty) { + components.set(RagiumDataComponents.FLUID, content) + } + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt index 72f8e1282..729e0d30d 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 @@ -6,6 +6,8 @@ import hiiragi283.ragium.api.data.RagiumDataComponents import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes import hiiragi283.ragium.common.block.entity.storage.base.HTBaseTankBlockEntity import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank +import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.transfer.holder.HTSlotInfo import net.minecraft.core.BlockPos import net.minecraft.core.component.DataComponentGetter import net.minecraft.core.component.DataComponentMap @@ -17,8 +19,11 @@ class HTTankBlockEntity(pos: BlockPos, state: BlockState) : override lateinit var tank: HTBasicFluidTank private set - override fun initTank(listener: Runnable) { - tank = HTVariableFluidTank.create(RagiumConfig.SERVER.tankCapacity, listener) + override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { + tank = builder.addSlot( + HTSlotInfo.INPUT, + HTVariableFluidTank.create(RagiumConfig.SERVER.tankCapacity, listener) + ) } // Sync // diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/base/HTBaseTankBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/base/HTBaseTankBlockEntity.kt index 311257a9b..60a264593 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/base/HTBaseTankBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/base/HTBaseTankBlockEntity.kt @@ -4,8 +4,8 @@ import hiiragi283.lib.transfer.fluid.HTFluidTank import hiiragi283.lib.transfer.holder.HTResourceSlotHolder import hiiragi283.ragium.api.util.HTStorageHelper import hiiragi283.ragium.common.block.entity.HTConfigurableBlockEntity +import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder import net.minecraft.core.BlockPos -import net.minecraft.core.Direction import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.Level import net.minecraft.world.level.block.entity.BlockEntityType @@ -17,18 +17,13 @@ abstract class HTBaseTankBlockEntity(type: BlockEntityType<*>, pos: BlockPos, st HTConfigurableBlockEntity(type, pos, state) { abstract val tank: HTFluidTank - override fun createFluidHandler(listener: Runnable): HTResourceSlotHolder { - initTank(listener) - return object : HTResourceSlotHolder { - override fun getSlots(side: Direction?): List = listOf(tank) - - override fun canInsert(side: Direction?): Boolean = true - - override fun canExtract(side: Direction?): Boolean = true - } + final override fun createFluidHandler(listener: Runnable): HTResourceSlotHolder? { + val builder: HTBasicFluidTankHolder.Builder = HTBasicFluidTankHolder.builder(this) + createFluidTanks(builder, listener) + return builder.build() } - protected abstract fun initTank(listener: Runnable) + protected open fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) {} override fun markDirtyComparator() { level?.updateNeighbourForOutputSignal(blockPos, blockState.block) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt index 7138717eb..545c81197 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt @@ -1,46 +1,19 @@ package hiiragi283.ragium.common.block.storage import hiiragi283.lib.registry.HTDeferredBlockEntityType -import hiiragi283.ragium.common.block.HTBasicEntityBlock +import hiiragi283.ragium.common.block.entity.bus.HTFluidBusBlock import net.minecraft.core.BlockPos -import net.minecraft.world.InteractionHand -import net.minecraft.world.InteractionResult -import net.minecraft.world.entity.player.Player -import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter -import net.minecraft.world.level.Level import net.minecraft.world.level.block.state.BlockState -import net.minecraft.world.phys.BlockHitResult import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape -import net.neoforged.neoforge.transfer.fluid.FluidUtil -class HTTankBlock(type: HTDeferredBlockEntityType<*>, properties: Properties) : HTBasicEntityBlock(type, properties) { +class HTTankBlock(type: HTDeferredBlockEntityType<*>, properties: Properties) : HTFluidBusBlock(type, properties) { companion object { @JvmField val SHAPE: VoxelShape = box(2.0, 0.0, 2.0, 14.0, 16.0, 14.0) } - override fun useItemOn( - itemStack: ItemStack, - state: BlockState, - level: Level, - pos: BlockPos, - player: Player, - hand: InteractionHand, - hitResult: BlockHitResult - ): InteractionResult { - val result: InteractionResult = super.useItemOn(itemStack, state, level, pos, player, hand, hitResult) - if (itemStack.isEmpty) return result - if (!player.isShiftKeyDown) { - val moved: Boolean = FluidUtil.interactWithFluidHandler(player, hand, level, pos, hitResult.direction, null) - if (moved) { - return InteractionResult.SUCCESS - } - } - return result - } - override fun getShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape = SHAPE } diff --git a/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTVariableFluidTank.kt b/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTVariableFluidTank.kt index 740a8452c..d1577f355 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTVariableFluidTank.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTVariableFluidTank.kt @@ -31,9 +31,13 @@ class HTVariableFluidTank( listener: Runnable?, canInsert: Predicate = HTTransferPredicates.alwaysTrue(), filter: Predicate = canInsert - ): HTVariableFluidTank = create(capacity, listener, HTTransferPredicates.notExternal(), { resource, _ -> - canInsert.test(resource) - }, filter) + ): HTVariableFluidTank = create( + capacity, + listener, + HTTransferPredicates.notExternal(), + { resource: FluidResource, _ -> canInsert.test(resource) }, + filter + ) @JvmStatic fun output(capacity: IntSupplier, listener: Runnable?): HTVariableFluidTank = From f52c401045e3c227a54108e911161845753d534e Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 26 Sep 2026 16:10:12 +0900 Subject: [PATCH 05/14] =?UTF-8?q?fix:=20HTPotionFluidIngredient=20?= =?UTF-8?q?=E3=81=A7=E6=B0=B4=E3=81=8C=E6=AD=A3=E5=B8=B8=E3=81=AB=E5=88=A4?= =?UTF-8?q?=E5=AE=9A=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/integration/jei/RagiumJeiPlugin.kt | 17 ++++++++++------- .../ingredient/HTPotionFluidIngredient.kt | 7 +++++-- 2 files changed, 15 insertions(+), 9 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 320d59f59..fe640845b 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -18,6 +18,7 @@ import hiiragi283.lib.registry.asHolderSequence import hiiragi283.lib.registry.getKeyOrThrow import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumRegistries +import hiiragi283.ragium.api.data.RagiumDataComponents import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryData import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders @@ -45,9 +46,9 @@ import mezz.jei.api.registration.IRecipeCategoryRegistration import mezz.jei.api.registration.IRecipeRegistration import mezz.jei.api.registration.ISubtypeRegistration import net.minecraft.core.Holder +import net.minecraft.core.component.DataComponents import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.alchemy.Potions import net.minecraft.world.item.crafting.display.SlotDisplay @@ -75,15 +76,17 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { .map(Holder::value) .forEach { item: Item -> if (item is HTPotionBasedItem) { - registration.registerSubtypeInterpreter(item) { stack: ItemStack, _ -> - HTPotionHelper.getContents(stack) - } + registration.registerFromDataComponentTypes(item, DataComponents.POTION_CONTENTS) } } + + // Creative Tank + registration.registerFromDataComponentTypes(RagiumBlocks.CREATIVE_TANK.asItem(), RagiumDataComponents.FLUID) // Ore Slurry Bucket - registration.registerSubtypeInterpreter(RagiumFluids.ORE_SLURRY.bucketHolder.get()) { stack: ItemStack, _ -> - HTOreSlurryDataHelper.getData(stack) - } + registration.registerFromDataComponentTypes( + RagiumFluids.ORE_SLURRY.bucketHolder.get(), + RagiumDataComponents.ORE_SLURRY_DATA + ) } override fun registerFluidSubtypes( diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTPotionFluidIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTPotionFluidIngredient.kt index 1a313b254..ea36ad3ec 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTPotionFluidIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTPotionFluidIngredient.kt @@ -19,6 +19,7 @@ import net.minecraft.world.item.alchemy.Potions import net.minecraft.world.item.crafting.display.SlotDisplay import net.minecraft.world.level.material.Fluid import net.minecraft.world.level.material.Fluids +import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.fluids.FluidStack import net.neoforged.neoforge.fluids.crafting.FluidIngredient import net.neoforged.neoforge.fluids.crafting.FluidIngredientType @@ -48,8 +49,10 @@ data class HTPotionFluidIngredient(val potions: HolderSet) : FluidIngred constructor(potion: Holder) : this(HolderSet.direct(potion)) - override fun test(fluidStack: FluidStack): Boolean = - HTPotionHelper.getContents(fluidStack).potion().fold({ false }, potions::contains) + override fun test(fluidStack: FluidStack): Boolean = when { + fluidStack.`is`(Tags.Fluids.WATER) -> Potions.WATER in potions + else -> HTPotionHelper.getContents(fluidStack).potion().fold({ false }, potions::contains) + } @Suppress("DEPRECATION") override fun generateFluids(): Stream> = From 462d8c43801a3d92059a0366e72edc70662f29fe Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 26 Sep 2026 16:28:26 +0900 Subject: [PATCH 06/14] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E6=B6=B2=E4=BD=93=E3=80=8C=E5=A1=A9=E6=B0=B4=E3=80=8D=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=20refactor:=20Electrolyzer=20=E3=81=AE?= =?UTF-8?q?=E3=82=AB=E3=83=86=E3=82=B4=E3=83=AA=E3=82=92=20Chemical=20?= =?UTF-8?q?=E3=81=8B=E3=82=89=20Electronics=20=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/client/RagiumClient.kt | 5 ++ .../client/integration/jei/RagiumJeiPlugin.kt | 12 ++--- .../integration/jei/RagiumJeiRecipeTypes.kt | 8 +-- .../category/RTElectrolyzingRecipeCategory.kt | 14 ++--- .../data/lang/RagiumEnglishLangProvider.kt | 5 +- .../data/lang/RagiumJapaneseLangProvider.kt | 5 +- .../recipe/RagiumChemicalRecipeProvider.kt | 2 +- .../data/recipe/RagiumCommonRecipeProvider.kt | 3 +- .../recipe/RagiumElectronicsRecipeProvider.kt | 2 +- .../recipe/RagiumVanillaRecipeProvider.kt | 2 +- .../ragium/blockstates/electrolyzer.json | 8 +-- .../assets/ragium/blockstates/salt_water.json | 7 +++ .../ragium/items/salt_water_bucket.json | 12 +++++ .../resources/assets/ragium/lang/en_us.json | 4 ++ .../resources/assets/ragium/lang/ja_jp.json | 4 ++ .../ragium/models/block/electrolyzer.json | 2 +- .../ragium/models/block/salt_water.json | 5 ++ .../data/c/tags/fluid/salt_water.json | 6 +++ .../resources/data/c/tags/item/buckets.json | 1 + .../data/c/tags/item/buckets/salt_water.json | 5 ++ .../hydrogen_from_salt_water.json | 8 +-- .../electrolyzing/hydrogen_from_water.json | 2 +- ...at_ocean.json => salt_water_at_ocean.json} | 2 +- .../ragium/recipe/shaped/electrolyzer.json | 6 +-- .../ragium/tags/block/machines/chemical.json | 1 - .../tags/block/machines/electronics.json | 1 + .../ragium/tags/item/machines/chemical.json | 1 - .../tags/item/machines/electronics.json | 1 + .../hiiragi283/ragium/api/RagiumConfig.kt | 8 +-- .../hiiragi283/ragium/api/RagiumConstants.kt | 4 +- .../builder/RTElectrolyzingRecipeBuilder.kt | 20 +------ .../recipe/builder/RagiumRecipeBuilders.kt | 16 +++--- .../api/recipe/RTElectrolyzingRecipe.kt | 41 +++++---------- .../ragium/api/recipe/RagiumRecipeLookups.kt | 6 +-- .../api/recipe/RagiumRecipeSerializers.kt | 8 +-- .../ragium/api/recipe/RagiumRecipeTypes.kt | 6 +-- .../hiiragi283/ragium/common/RagiumCommon.kt | 1 + .../ragium/common/block/RagiumBlocks.kt | 10 ++-- .../block/entity/RagiumBlockEntityTypes.kt | 10 ++-- .../machine/HTElectrolyzerBlockEntity.kt | 52 +++++-------------- .../ragium/common/fluid/RagiumFluids.kt | 3 ++ 41 files changed, 152 insertions(+), 167 deletions(-) create mode 100644 src/generated/resources/assets/ragium/blockstates/salt_water.json create mode 100644 src/generated/resources/assets/ragium/items/salt_water_bucket.json create mode 100644 src/generated/resources/assets/ragium/models/block/salt_water.json create mode 100644 src/generated/resources/data/c/tags/fluid/salt_water.json create mode 100644 src/generated/resources/data/c/tags/item/buckets/salt_water.json rename src/generated/resources/data/ragium/recipe/resource/extracting/{water_at_ocean.json => salt_water_at_ocean.json} (80%) diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 7c25e4c96..da2f581f7 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -44,6 +44,7 @@ import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent import net.neoforged.neoforge.client.event.EntityRenderersEvent import net.neoforged.neoforge.client.event.RegisterClientTooltipComponentFactoriesEvent import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent +import net.neoforged.neoforge.client.fluid.FluidTintSources import net.neoforged.neoforge.client.network.event.RegisterClientPayloadHandlersEvent import net.neoforged.neoforge.common.tooltip.TooltipLocation import net.neoforged.neoforge.event.RegisterTooltipAppendersEvent @@ -183,6 +184,10 @@ data object RagiumClient : HTClientMod() { colorTint(Color(0x33cc66)) } + register.register(RagiumFluids.SALT_WATER) { + dull() + tintSource = FluidTintSources.water() + } register.register(RagiumFluids.NAOH_SOLUTION) { dull() colorTint(Color(0x003366)) 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 fe640845b..a143a1995 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -172,17 +172,17 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.REFINING, RagiumRecipeLookups.REFINING) // Chemical HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.BATHING, RagiumRecipeLookups.BATHING) - HTJeiRecipeHelper.addRecipes( - registration, - RagiumJeiRecipeTypes.ELECTROLYZING, - RagiumRecipeLookups.ELECTROLYZING - ) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.MIXING, RagiumRecipeLookups.MIXING) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.REACTING, RagiumRecipeLookups.REACTING) // Bio HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.BREWING, RagiumRecipeLookups.BREWING) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.PLANTING, RagiumRecipeLookups.PLANTING) // Electronics + HTJeiRecipeHelper.addRecipes( + registration, + RagiumJeiRecipeTypes.ELECTROLYZING, + RagiumRecipeLookups.ELECTROLYZING + ) HTJeiRecipeHelper.addRecipes( registration, RagiumJeiRecipeTypes.RESOURCE_EXTRACTING, @@ -286,12 +286,12 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { // Chemical registration.addCraftingStation(RagiumJeiRecipeTypes.BATHING, RagiumBlocks.CHEMICAL_BATH) registration.addCraftingStation(RagiumJeiRecipeTypes.REACTING, RagiumBlocks.CHEMICAL_REACTOR) - registration.addCraftingStation(RagiumJeiRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER) registration.addCraftingStation(RagiumJeiRecipeTypes.MIXING, RagiumBlocks.MIXER) // Bio registration.addCraftingStation(RagiumJeiRecipeTypes.BREWING, RagiumBlocks.BREWERY) registration.addCraftingStation(RagiumJeiRecipeTypes.PLANTING, RagiumBlocks.PLANTER) // Electronics + registration.addCraftingStation(RagiumJeiRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER) registration.addCraftingStation(RagiumJeiRecipeTypes.ASSEMBLING, RagiumBlocks.PRECISION_ASSEMBLER) // Arcane registration.addCraftingStation(RagiumJeiRecipeTypes.ENCHANTING, RagiumBlocks.ENCHANTER) diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt index e27fd82fb..cdb9bd557 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -68,10 +68,6 @@ data object RagiumJeiRecipeTypes { val BATHING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.BATHING, RagiumBlocks.CHEMICAL_BATH) - @JvmField - val ELECTROLYZING: HTHolderJeiRecipeType = - HTJeiRecipeType(RagiumRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER) - @JvmField val MIXING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.MIXING, RagiumBlocks.MIXER) @@ -90,6 +86,10 @@ data object RagiumJeiRecipeTypes { HTJeiRecipeType(RagiumRecipeTypes.PLANTING, RagiumBlocks.PLANTER) // Electronics + @JvmField + val ELECTROLYZING: HTHolderJeiRecipeType = + HTJeiRecipeType(RagiumRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER) + @JvmField val RESOURCE_EXTRACTING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.RESOURCE_EXTRACTING, RagiumBlocks.MACHINE_CASING) diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTElectrolyzingRecipeCategory.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTElectrolyzingRecipeCategory.kt index 54949a7bf..1b2a91bd9 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTElectrolyzingRecipeCategory.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTElectrolyzingRecipeCategory.kt @@ -16,7 +16,7 @@ class RTElectrolyzingRecipeCategory(guiHelper: IGuiHelper) : HTHolderRecipeCategory( guiHelper, RagiumJeiRecipeTypes.ELECTROLYZING, - 18 * 8, + 18 * 6, 18 * 1, RTElectrolyzingRecipe.CODEC ) { @@ -24,16 +24,11 @@ class RTElectrolyzingRecipeCategory(guiHelper: IGuiHelper) : // inputs builder .addInputSlot(getPosition(0), getPosition(0)) - .add(recipe.fluidIngredient) + .add(recipe.ingredient) .setSlotBackground(HTBackgroundType.INPUT) - val itemInput: IRecipeSlotBuilder = builder.addInputSlot( - getPosition(2), - getPosition(0) - ).setSlotBackground(HTBackgroundType.INPUT) - recipe.itemIngredient.ifPresent(itemInput::add) // outputs val outputSlots: Array = Array(3) { index: Int -> - builder.addOutputSlot(getPosition(5 + index), getPosition(0)).setSlotBackground(HTBackgroundType.OUTPUT) + builder.addOutputSlot(getPosition(3 + index), getPosition(0)).setSlotBackground(HTBackgroundType.OUTPUT) } for ((index: Int, result: HTFluidResult) in recipe.results.withIndex()) { outputSlots[index].add(result) @@ -41,7 +36,6 @@ class RTElectrolyzingRecipeCategory(guiHelper: IGuiHelper) : } override fun setupRecipeExtras(builder: IRecipeExtrasBuilder, recipe: RTElectrolyzingRecipe, focuses: IFocusGroup) { - builder.addRecipePlus(getPosition(1)) - builder.addRecipeArrow(recipe).setPosition(getPosition(3.25), getPosition(0)) + builder.addRecipeArrow(recipe).setPosition(getPosition(1.25), getPosition(0)) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 2d1b527ef..eb78fe1e6 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -64,12 +64,12 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumBlocks.CHEMICAL_BATH, "Chemical Bath") add(RagiumBlocks.CHEMICAL_REACTOR, "Chemical Reactor") - add(RagiumBlocks.ELECTROLYZER, "Electrolyzer") add(RagiumBlocks.MIXER, "Mixer") add(RagiumBlocks.BREWERY, "Brewery") add(RagiumBlocks.PLANTER, "Planter") + add(RagiumBlocks.ELECTROLYZER, "Electrolyzer") add(RagiumBlocks.PRECISION_ASSEMBLER, "Precision Assembler") add(RagiumBlocks.SCANNER, "Laser Scanner") @@ -113,6 +113,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFluid(RagiumFluids.LIQUID_EXPLOSIVE, "Liquid Explosive") addFluid(RagiumFluids.HYDROGEN_FLUORIDE, "Hydrogen Fluoride") addFluid(RagiumFluids.HYDROFLUORIC_ACID, "Hydrofluoric Acid") + addFluid(RagiumFluids.SALT_WATER, "Salt Water") addFluid(RagiumFluids.NAOH_SOLUTION, "Sodium Hydroxide Solution") addFluid(RagiumFluids.ALUMINA_SOLUTION, "Alumina Solution") addFluid(RagiumFluids.SULFUR_DIOXIDE, "Sulfur Dioxide") @@ -177,13 +178,13 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumRecipeTypes.REFINING, "Refining") add(RagiumRecipeTypes.BATHING, "Chemical Bathing") - add(RagiumRecipeTypes.ELECTROLYZING, "Electrolyzing") add(RagiumRecipeTypes.MIXING, "Mixing") add(RagiumRecipeTypes.REACTING, "Chemical Reacting") add(RagiumRecipeTypes.BREWING, "Brewing") add(RagiumRecipeTypes.PLANTING, "Planting") + add(RagiumRecipeTypes.ELECTROLYZING, "Electrolyzing") add(RagiumRecipeTypes.RESOURCE_EXTRACTING, "Resource Extracting") add(RagiumRecipeTypes.ENCHANTING, "Enchanting") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 1ac6ceddc..41cd0f986 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -60,12 +60,12 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumBlocks.CHEMICAL_BATH, "化学浴槽") add(RagiumBlocks.CHEMICAL_REACTOR, "化学反応槽") - add(RagiumBlocks.ELECTROLYZER, "電解機") add(RagiumBlocks.MIXER, "混合機") add(RagiumBlocks.BREWERY, "醸造機") add(RagiumBlocks.PLANTER, "栽培機") + add(RagiumBlocks.ELECTROLYZER, "電解機") add(RagiumBlocks.PRECISION_ASSEMBLER, "精密組立機") add(RagiumBlocks.SCANNER, "レーザースキャナ") @@ -109,6 +109,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFluid(RagiumFluids.LIQUID_EXPLOSIVE, "液体爆薬") addFluid(RagiumFluids.HYDROGEN_FLUORIDE, "フッ化水素") addFluid(RagiumFluids.HYDROFLUORIC_ACID, "フッ化水素酸") + addFluid(RagiumFluids.SALT_WATER, "塩水") addFluid(RagiumFluids.NAOH_SOLUTION, "水酸化ナトリウム水溶液") addFluid(RagiumFluids.ALUMINA_SOLUTION, "アルミナ水溶液") addFluid(RagiumFluids.SULFUR_DIOXIDE, "二酸化硫黄") @@ -173,13 +174,13 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumRecipeTypes.REFINING, "蒸留") add(RagiumRecipeTypes.BATHING, "化学洗浄") - add(RagiumRecipeTypes.ELECTROLYZING, "電気分解") add(RagiumRecipeTypes.MIXING, "混合") add(RagiumRecipeTypes.REACTING, "化学反応") add(RagiumRecipeTypes.BREWING, "醸造") add(RagiumRecipeTypes.PLANTING, "栽培") + add(RagiumRecipeTypes.ELECTROLYZING, "電気分解") add(RagiumRecipeTypes.RESOURCE_EXTRACTING, "資源採集") add(RagiumRecipeTypes.ENCHANTING, "エンチャント") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt index 45ec6b191..49ffcb485 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt @@ -56,7 +56,7 @@ class RagiumChemicalRecipeProvider(packOutput: PackOutput, future: CompletableFu private fun electrolyzing() { // 2x H2O -> 2x H2 + O2 RagiumRecipeBuilders.electrolyzing { - fluidIngredient { +waterSet() } + ingredient { +waterSet() } result { +RagiumFluids.HYDROGEN } result { +RagiumFluids.OXYGEN diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index 2eb087236..cad42f0e2 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -317,8 +317,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu // 2x NaCl(aq) -> H2 + Cl2 + 2x NaOH(aq) RagiumRecipeBuilders.electrolyzing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SALT) } - fluidIngredient { +waterSet() } + ingredient { +holderSet(RagiumFluids.SALT_WATER) } result { +RagiumFluids.HYDROGEN amount /= 2 diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt index 8e51cca59..448369717 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt @@ -22,7 +22,7 @@ class RagiumElectronicsRecipeProvider(packOutput: PackOutput, future: Completabl RagiumRecipeBuilders.resourceExtracting { biomes { +holderSet(Tags.Biomes.IS_OCEAN) } result { - +Fluids.WATER + +RagiumFluids.SALT_WATER amount *= 4 } recipeId suffix "_at_ocean" diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 869bfc41e..82031f74f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -282,12 +282,12 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut heat(RagiumBlocks.SMELTER) { items { +Items.FURNACE } } // Chemical chemical(RagiumBlocks.CHEMICAL_BATH) { items { +Items.CAULDRON } } - chemical(RagiumBlocks.ELECTROLYZER) { +holderSet(ItemTags.LIGHTNING_RODS) } chemical(RagiumBlocks.MIXER) { +holderSet(Tags.Items.BUCKETS_EMPTY) } // Bio bio(RagiumBlocks.BREWERY) { items { +Items.BREWING_STAND } } bio(RagiumBlocks.PLANTER) { items { +Items.FLOWER_POT } } // Electronics + electronics(RagiumBlocks.ELECTROLYZER) { +holderSet(ItemTags.LIGHTNING_RODS) } electronics(RagiumBlocks.PRECISION_ASSEMBLER) { items { +RagiumBlocks.ASSEMBLER } } // Arcane arcane(RagiumBlocks.ENCHANTER) { items { +Items.ENCHANTING_TABLE } } diff --git a/src/generated/resources/assets/ragium/blockstates/electrolyzer.json b/src/generated/resources/assets/ragium/blockstates/electrolyzer.json index 48bc37471..47fbf005c 100644 --- a/src/generated/resources/assets/ragium/blockstates/electrolyzer.json +++ b/src/generated/resources/assets/ragium/blockstates/electrolyzer.json @@ -1,7 +1,7 @@ { "variants": { "facing=east,is_active=false": { - "model": "ragium:block/machine/chemical", + "model": "ragium:block/machine/electronics", "y": 90 }, "facing=east,is_active=true": { @@ -9,13 +9,13 @@ "y": 90 }, "facing=north,is_active=false": { - "model": "ragium:block/machine/chemical" + "model": "ragium:block/machine/electronics" }, "facing=north,is_active=true": { "model": "ragium:block/electrolyzer" }, "facing=south,is_active=false": { - "model": "ragium:block/machine/chemical", + "model": "ragium:block/machine/electronics", "y": 180 }, "facing=south,is_active=true": { @@ -23,7 +23,7 @@ "y": 180 }, "facing=west,is_active=false": { - "model": "ragium:block/machine/chemical", + "model": "ragium:block/machine/electronics", "y": 270 }, "facing=west,is_active=true": { diff --git a/src/generated/resources/assets/ragium/blockstates/salt_water.json b/src/generated/resources/assets/ragium/blockstates/salt_water.json new file mode 100644 index 000000000..bd4a89498 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/salt_water.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/salt_water" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/salt_water_bucket.json b/src/generated/resources/assets/ragium/items/salt_water_bucket.json new file mode 100644 index 000000000..7c048af53 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/salt_water_bucket.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "fluid": "ragium:salt_water", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid", + "particle": "minecraft:item/bucket" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 916429d5a..6c26890ca 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -100,6 +100,7 @@ "block.ragium.red_dye": "Red Dye", "block.ragium.refinery": "Refinery", "block.ragium.resin": "Resin", + "block.ragium.salt_water": "Salt Water", "block.ragium.scanner": "Laser Scanner", "block.ragium.smelter": "Smelter", "block.ragium.sodium_hydroxide_solution": "Sodium Hydroxide Solution", @@ -283,6 +284,7 @@ "item.ragium.red_dye_bucket": "Red Dye Bucket", "item.ragium.resin_bucket": "Resin Bucket", "item.ragium.salt_dust": "Salt Dust", + "item.ragium.salt_water_bucket": "Salt Water Bucket", "item.ragium.silicon_dust": "Silicon Dust", "item.ragium.silicon_wafer": "Silicon Wafer", "item.ragium.sodium_hydroxide_solution_bucket": "Sodium Hydroxide Solution Bucket", @@ -407,6 +409,7 @@ "tag.fluid.c.ominous_flux": "Ominous Flux", "tag.fluid.c.oxygen": "Oxygen", "tag.fluid.c.resin": "Resin", + "tag.fluid.c.salt_water": "Salt Water", "tag.fluid.c.sodium_hydroxide_solution": "Sodium Hydroxide Solution", "tag.fluid.c.sulfur_dioxide": "Sulfur Dioxide", "tag.fluid.c.sulfur_trioxide": "Sulfur Trioxide", @@ -453,6 +456,7 @@ "tag.item.c.buckets.ominous_flux": "Ominous Flux Bucket", "tag.item.c.buckets.oxygen": "Oxygen Bucket", "tag.item.c.buckets.resin": "Resin Bucket", + "tag.item.c.buckets.salt_water": "Salt Water Bucket", "tag.item.c.buckets.sodium_hydroxide_solution": "Sodium Hydroxide Solution Bucket", "tag.item.c.buckets.sulfur_dioxide": "Sulfur Dioxide Bucket", "tag.item.c.buckets.sulfur_trioxide": "Sulfur Trioxide Bucket", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index c2e43c512..4211ec951 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -100,6 +100,7 @@ "block.ragium.red_dye": "赤色の染料", "block.ragium.refinery": "精製機", "block.ragium.resin": "樹脂", + "block.ragium.salt_water": "塩水", "block.ragium.scanner": "レーザースキャナ", "block.ragium.smelter": "製錬炉", "block.ragium.sodium_hydroxide_solution": "水酸化ナトリウム水溶液", @@ -283,6 +284,7 @@ "item.ragium.red_dye_bucket": "赤色の染料入りバケツ", "item.ragium.resin_bucket": "樹脂入りバケツ", "item.ragium.salt_dust": "食塩の粉", + "item.ragium.salt_water_bucket": "塩水入りバケツ", "item.ragium.silicon_dust": "シリコンの粉", "item.ragium.silicon_wafer": "シリコンウェハ", "item.ragium.sodium_hydroxide_solution_bucket": "水酸化ナトリウム水溶液入りバケツ", @@ -407,6 +409,7 @@ "tag.fluid.c.ominous_flux": "不吉な流動体", "tag.fluid.c.oxygen": "酸素", "tag.fluid.c.resin": "樹脂", + "tag.fluid.c.salt_water": "塩水", "tag.fluid.c.sodium_hydroxide_solution": "水酸化ナトリウム水溶液", "tag.fluid.c.sulfur_dioxide": "二酸化硫黄", "tag.fluid.c.sulfur_trioxide": "三酸化硫黄", @@ -453,6 +456,7 @@ "tag.item.c.buckets.ominous_flux": "不吉な流動体入りバケツ", "tag.item.c.buckets.oxygen": "酸素入りバケツ", "tag.item.c.buckets.resin": "樹脂入りバケツ", + "tag.item.c.buckets.salt_water": "塩水入りバケツ", "tag.item.c.buckets.sodium_hydroxide_solution": "水酸化ナトリウム水溶液入りバケツ", "tag.item.c.buckets.sulfur_dioxide": "二酸化硫黄入りバケツ", "tag.item.c.buckets.sulfur_trioxide": "三酸化硫黄入りバケツ", diff --git a/src/generated/resources/assets/ragium/models/block/electrolyzer.json b/src/generated/resources/assets/ragium/models/block/electrolyzer.json index 871ea10fd..92bd9d14e 100644 --- a/src/generated/resources/assets/ragium/models/block/electrolyzer.json +++ b/src/generated/resources/assets/ragium/models/block/electrolyzer.json @@ -2,7 +2,7 @@ "parent": "minecraft:block/orientable", "textures": { "front": "ragium:block/electrolyzer_front", - "side": "ragium:block/machine/chemical_side", + "side": "ragium:block/machine/electronics_side", "top": "ragium:block/machine_casing" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/salt_water.json b/src/generated/resources/assets/ragium/models/block/salt_water.json new file mode 100644 index 000000000..67032282f --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/salt_water.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/water_still" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/salt_water.json b/src/generated/resources/data/c/tags/fluid/salt_water.json new file mode 100644 index 000000000..d7f9e601b --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/salt_water.json @@ -0,0 +1,6 @@ +{ + "values": [ + "ragium:flowing_salt_water", + "ragium:salt_water" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets.json b/src/generated/resources/data/c/tags/item/buckets.json index fc1fe9cb8..8356214c7 100644 --- a/src/generated/resources/data/c/tags/item/buckets.json +++ b/src/generated/resources/data/c/tags/item/buckets.json @@ -42,6 +42,7 @@ "#c:buckets/oxygen", "#c:buckets/potion", "#c:buckets/resin", + "#c:buckets/salt_water", "#c:buckets/sodium_hydroxide_solution", "#c:buckets/sulfur_dioxide", "#c:buckets/sulfur_trioxide", diff --git a/src/generated/resources/data/c/tags/item/buckets/salt_water.json b/src/generated/resources/data/c/tags/item/buckets/salt_water.json new file mode 100644 index 000000000..d49d534f7 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/salt_water.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:salt_water_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_salt_water.json b/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_salt_water.json index 161e77bfc..347ee03bc 100644 --- a/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_salt_water.json +++ b/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_salt_water.json @@ -1,12 +1,8 @@ { "type": "ragium:electrolyzing", - "fluid_ingredient": { + "ingredient": { "amount": 1000, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/salt" + "fluids": "#c:salt_water" }, "results": [ { diff --git a/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_water.json b/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_water.json index b1e72301b..af0768a99 100644 --- a/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_water.json +++ b/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_water.json @@ -1,6 +1,6 @@ { "type": "ragium:electrolyzing", - "fluid_ingredient": { + "ingredient": { "amount": 1000, "fluids": "#c:water" }, diff --git a/src/generated/resources/data/ragium/recipe/resource/extracting/water_at_ocean.json b/src/generated/resources/data/ragium/recipe/resource/extracting/salt_water_at_ocean.json similarity index 80% rename from src/generated/resources/data/ragium/recipe/resource/extracting/water_at_ocean.json rename to src/generated/resources/data/ragium/recipe/resource/extracting/salt_water_at_ocean.json index b06ae2560..48fa996a6 100644 --- a/src/generated/resources/data/ragium/recipe/resource/extracting/water_at_ocean.json +++ b/src/generated/resources/data/ragium/recipe/resource/extracting/salt_water_at_ocean.json @@ -3,7 +3,7 @@ "condition": "#c:is_ocean", "result": { "amount": 4000, - "id": "minecraft:water" + "id": "ragium:salt_water" }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json b/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json index 4a3c27412..ce949af4c 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json +++ b/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json @@ -2,9 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": "#c:nuggets/black_steel", - "B": "ragium:chemical_machine_parts", - "C": "#c:gears/gold", + "A": "#c:nuggets/void_metal", + "B": "ragium:electronics_machine_parts", + "C": "#c:gears/diamond", "D": "#minecraft:lightning_rods" }, "pattern": [ diff --git a/src/generated/resources/data/ragium/tags/block/machines/chemical.json b/src/generated/resources/data/ragium/tags/block/machines/chemical.json index 72f068868..e851b2628 100644 --- a/src/generated/resources/data/ragium/tags/block/machines/chemical.json +++ b/src/generated/resources/data/ragium/tags/block/machines/chemical.json @@ -2,7 +2,6 @@ "values": [ "ragium:chemical_bath", "ragium:chemical_reactor", - "ragium:electrolyzer", "ragium:mixer" ] } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/block/machines/electronics.json b/src/generated/resources/data/ragium/tags/block/machines/electronics.json index 1be45a33d..2be2125c5 100644 --- a/src/generated/resources/data/ragium/tags/block/machines/electronics.json +++ b/src/generated/resources/data/ragium/tags/block/machines/electronics.json @@ -1,5 +1,6 @@ { "values": [ + "ragium:electrolyzer", "ragium:precision_assembler", "ragium:scanner" ] diff --git a/src/generated/resources/data/ragium/tags/item/machines/chemical.json b/src/generated/resources/data/ragium/tags/item/machines/chemical.json index 72f068868..e851b2628 100644 --- a/src/generated/resources/data/ragium/tags/item/machines/chemical.json +++ b/src/generated/resources/data/ragium/tags/item/machines/chemical.json @@ -2,7 +2,6 @@ "values": [ "ragium:chemical_bath", "ragium:chemical_reactor", - "ragium:electrolyzer", "ragium:mixer" ] } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/item/machines/electronics.json b/src/generated/resources/data/ragium/tags/item/machines/electronics.json index 1be45a33d..2be2125c5 100644 --- a/src/generated/resources/data/ragium/tags/item/machines/electronics.json +++ b/src/generated/resources/data/ragium/tags/item/machines/electronics.json @@ -1,5 +1,6 @@ { "values": [ + "ragium:electrolyzer", "ragium:precision_assembler", "ragium:scanner" ] diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt index cdf93d609..59c128668 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt @@ -137,10 +137,6 @@ data object RagiumConfig { val chemicalReactor: HTEnergyConfig = HTEnergyConfig.createMachine(builder, RagiumConstants.CHEMICAL_REACTOR) - @JvmField - val electrolyzer: HTEnergyConfig = - HTEnergyConfig.createMachine(builder, RagiumConstants.ELECTROLYZER) - @JvmField val mixer: HTEnergyConfig = HTEnergyConfig.createMachine(builder, RagiumConstants.MIXER) @@ -155,6 +151,10 @@ data object RagiumConfig { HTEnergyConfig.createMachine(builder, RagiumConstants.PLANTER) // Electronics + @JvmField + val electrolyzer: HTEnergyConfig = + HTEnergyConfig.createMachine(builder, RagiumConstants.ELECTROLYZER, 64) + @JvmField val precisionAssembler: HTEnergyConfig = HTEnergyConfig.createMachine(builder, RagiumConstants.PRECISION_ASSEMBLER, 64) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt index 2016b67c6..3f6117868 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt @@ -25,7 +25,6 @@ data object RagiumConstants { // Chemical const val CHEMICAL_BATH = "chemical_bath" const val CHEMICAL_REACTOR = "chemical_reactor" - const val ELECTROLYZER = "electrolyzer" const val MIXER = "mixer" // Bio @@ -33,6 +32,7 @@ data object RagiumConstants { const val PLANTER = "planter" // Electronics + const val ELECTROLYZER = "electrolyzer" const val PRECISION_ASSEMBLER = "precision_assembler" const val SCANNER = "scanner" @@ -60,7 +60,6 @@ data object RagiumConstants { // Chemical const val BATHING = "bathing" - const val ELECTROLYZING = "electrolyzing" const val MIXING = "mixing" const val REACTING = "reacting" @@ -69,6 +68,7 @@ data object RagiumConstants { const val PLANTING = "planting" // Electronics + const val ELECTROLYZING = "electrolyzing" const val PRINTING = "printing" const val RESOURCE_EXTRACTING = "resource/extracting" diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTElectrolyzingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTElectrolyzingRecipeBuilder.kt index daa089d8a..db5a51593 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTElectrolyzingRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTElectrolyzingRecipeBuilder.kt @@ -5,17 +5,14 @@ package hiiragi283.ragium.api.data.recipe.builder import hiiragi283.lib.collection.toNel import hiiragi283.lib.data.recipe.builder.HTProgressRecipeBuilder import hiiragi283.lib.data.recipe.ingredient.HTFluidIngredientBuilder -import hiiragi283.lib.data.recipe.ingredient.HTItemIngredientBuilder import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.ingredient.HTItemIngredient import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.util.HTDelegates import hiiragi283.ragium.api.RagiumConstants import hiiragi283.ragium.api.recipe.RTElectrolyzingRecipe import it.unimi.dsi.fastutil.objects.ObjectArrayList import net.minecraft.resources.Identifier -import java.util.Optional import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract @@ -24,29 +21,16 @@ class RTElectrolyzingRecipeBuilder : HTProgressRecipeBuilder by HTDelegates.optionalInitialize() - @PublishedApi internal var fluidIngredient: HTFluidIngredient by HTDelegates.onceInitialize() - operator fun HTItemIngredient.unaryPlus() { - itemIngredient = Optional.of(this) - } - operator fun HTFluidIngredient.unaryPlus() { fluidIngredient = this } - inline fun itemIngredient(builderAction: HTItemIngredientBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTItemIngredientBuilder.build(builderAction) - } - - inline fun fluidIngredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { + inline fun ingredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt index 9fd9cbf0d..a1fe91fbe 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 @@ -155,14 +155,6 @@ data object RagiumRecipeBuilders { return HTItemAndFluidToRecipeBuilder.ToItem(RagiumConstants.BATHING, ::RTBathingRecipe).apply(builderAction) } - @JvmStatic - inline fun electrolyzing(builderAction: RTElectrolyzingRecipeBuilder.() -> Unit): RTElectrolyzingRecipeBuilder { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - return RTElectrolyzingRecipeBuilder().apply(builderAction) - } - @JvmStatic inline fun mixing( builderAction: HTItemAndFluidToRecipeBuilder.ToFluid.() -> Unit @@ -203,6 +195,14 @@ data object RagiumRecipeBuilders { } // Electronics + @JvmStatic + inline fun electrolyzing(builderAction: RTElectrolyzingRecipeBuilder.() -> Unit): RTElectrolyzingRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return RTElectrolyzingRecipeBuilder().apply(builderAction) + } + @JvmStatic inline fun resourceExtracting( builderAction: RTResourceExtractingRecipeBuilder.() -> Unit diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt index 4fdd7020e..96be228b6 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt @@ -10,45 +10,34 @@ import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.base.HTRecipeFactories import hiiragi283.lib.recipe.base.HTRecipePredicates import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.ingredient.test -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.recipe.result.createOrEmpty import hiiragi283.lib.serialization.codec.HTCodecs import hiiragi283.lib.serialization.codec.compactNelFieldOf -import hiiragi283.lib.serialization.network.HTStreamCodecs import hiiragi283.lib.serialization.network.nelOf -import hiiragi283.lib.util.fold import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec -import net.minecraft.world.item.ItemInstance -import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.RecipeSerializer import net.neoforged.neoforge.fluids.FluidInstance import net.neoforged.neoforge.fluids.FluidStack -import java.util.Optional @JvmRecord data class RTElectrolyzingRecipe( - val itemIngredient: Optional, - val fluidIngredient: HTFluidIngredient, + val ingredient: HTFluidIngredient, val results: Nel, override val progressData: HTProgressData -) : HTRecipePredicates.ItemAndFluid, - HTRecipeFactories.ItemAndFluid, - HTProgressRecipe.Simple, - HTSerializableRecipe { +) : HTRecipePredicates.SingleFluid, + HTRecipeFactories.SingleFluidTo, + HTProgressRecipe.Simple, + HTSerializableRecipe { companion object { @JvmField val CODEC: MapCodec = HTCodecs.recordMap { instance -> instance.group( - HTItemIngredient.CODEC - .optionalFieldOf(HTConstants.ITEM_INGREDIENT) - .forGetter(RTElectrolyzingRecipe::itemIngredient), HTFluidIngredient.CODEC - .fieldOf(HTConstants.FLUID_INGREDIENT) - .forGetter(RTElectrolyzingRecipe::fluidIngredient), + .fieldOf(HTConstants.INGREDIENT) + .forGetter(RTElectrolyzingRecipe::ingredient), HTFluidResult.CODEC .compactNelFieldOf(HTConstants.RESULT, HTConstants.RESULTS, 3) .forGetter(RTElectrolyzingRecipe::results), @@ -58,10 +47,8 @@ data class RTElectrolyzingRecipe( @JvmField val STREAM_CODEC: StreamCodec = StreamCodec.composite( - HTStreamCodecs.optional(HTItemIngredient.STREAM_CODEC), - RTElectrolyzingRecipe::itemIngredient, HTFluidIngredient.STREAM_CODEC, - RTElectrolyzingRecipe::fluidIngredient, + RTElectrolyzingRecipe::ingredient, HTFluidResult.STREAM_CODEC.nelOf(), RTElectrolyzingRecipe::results, HTProgressData.STREAM_CODEC, @@ -73,15 +60,11 @@ data class RTElectrolyzingRecipe( val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) } - override fun test(first: ItemInstance, second: FluidInstance): Boolean = - itemIngredient.test(first) && fluidIngredient.test(second) + override fun test(input: FluidInstance): Boolean = ingredient.test(input) - override fun getMatchingStack(first: ItemInstance, second: FluidInstance): Pair = Pair( - itemIngredient.fold(ItemStack::EMPTY) { it.getMatchingStack(first) }, - fluidIngredient.getMatchingStack(second) - ) + override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) - override fun apply(first: ItemInstance, second: FluidInstance): ElectrolyzedResult = ElectrolyzedResult( + override fun apply(input: FluidInstance): ElectrolyzedResult = ElectrolyzedResult( results.head.create(), results.getOrNull(1).createOrEmpty(), results.getOrNull(2).createOrEmpty() diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt index ae8e51d50..a24aec660 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt @@ -70,9 +70,6 @@ data object RagiumRecipeLookups { @JvmField val BATHING: HTCompoundRecipeLookup = create(RagiumConstants.BATHING) - @JvmField - val ELECTROLYZING: HTRecipeLookup = create(RagiumRecipeTypes.ELECTROLYZING) - @JvmField val MIXING: HTCompoundRecipeLookup = create(RagiumConstants.MIXING) @@ -87,6 +84,9 @@ data object RagiumRecipeLookups { val PLANTING: HTCompoundRecipeLookup = create(RagiumConstants.PLANTING) // Electronics + @JvmField + val ELECTROLYZING: HTRecipeLookup = create(RagiumRecipeTypes.ELECTROLYZING) + @JvmField val RESOURCE_EXTRACTING: HTRecipeLookup = create(RagiumRecipeTypes.RESOURCE_EXTRACTING) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt index 73d98844e..0d1a26c55 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt @@ -87,10 +87,6 @@ data object RagiumRecipeSerializers { val BATHING: RecipeSerializer = register(RagiumConstants.BATHING, RTBathingRecipe.SERIALIZER) - @JvmField - val ELECTROLYZING: RecipeSerializer = - register(RagiumConstants.ELECTROLYZING, RTElectrolyzingRecipe.SERIALIZER) - @JvmField val MIXING: RecipeSerializer = register(RagiumConstants.MIXING, RTMixingRecipe.SERIALIZER) @@ -109,6 +105,10 @@ data object RagiumRecipeSerializers { register(RagiumConstants.PLANTING, RTPlantingRecipe.SERIALIZER) // Electronics + @JvmField + val ELECTROLYZING: RecipeSerializer = + register(RagiumConstants.ELECTROLYZING, RTElectrolyzingRecipe.SERIALIZER) + @JvmField val RESOURCE_EXTRACTING: RecipeSerializer = register(RagiumConstants.RESOURCE_EXTRACTING, RTResourceExtractingRecipe.SERIALIZER) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index 3a44487c4..49255eb1b 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -67,9 +67,6 @@ data object RagiumRecipeTypes { @JvmField val BATHING: HTRecipeType = create(RagiumConstants.BATHING) - @JvmField - val ELECTROLYZING: HTRecipeType = create(RagiumConstants.ELECTROLYZING) - @JvmField val MIXING: HTRecipeType = create(RagiumConstants.MIXING) @@ -84,6 +81,9 @@ data object RagiumRecipeTypes { val PLANTING: HTRecipeType = create(RagiumConstants.PLANTING) // Electronics + @JvmField + val ELECTROLYZING: HTRecipeType = create(RagiumConstants.ELECTROLYZING) + @JvmField val RESOURCE_EXTRACTING: HTRecipeType = create(RagiumConstants.RESOURCE_EXTRACTING) diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index eb5447ac2..b191c67d0 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -105,6 +105,7 @@ internal data object RagiumCommon { setChemical(RagiumFluids.HYDROGEN_FLUORIDE, RagiumChemicals.HYDROGEN_FLUORIDE) setChemical(RagiumFluids.HYDROFLUORIC_ACID, RagiumChemicals.HYDROGEN_FLUORIDE) + setChemical(RagiumFluids.SALT_WATER, RagiumChemicals.SODIUM_CHLORIDE) setChemical(RagiumFluids.NAOH_SOLUTION, RagiumChemicals.SODIUM_HYDROXIDE) setChemical(RagiumFluids.ALUMINA_SOLUTION, RagiumChemicals.ALUMINA) setChemical(RagiumFluids.SULFUR_DIOXIDE, RagiumChemicals.SULFUR_DIOXIDE) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 38eca5719..08307562f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -288,10 +288,6 @@ data object RagiumBlocks { val CHEMICAL_REACTOR: HTBasicDeferredBlockAndItem = registerFakeMachine(RagiumConstants.CHEMICAL_REACTOR) - @JvmField - val ELECTROLYZER: HTBasicDeferredBlockAndItem = - registerMachine(RagiumBlockEntityTypes.ELECTROLYZER) - @JvmField val MIXER: HTBasicDeferredBlockAndItem = registerMachine(RagiumBlockEntityTypes.MIXER) @@ -306,6 +302,10 @@ data object RagiumBlocks { registerMachine(RagiumBlockEntityTypes.PLANTER) // Electronics + @JvmField + val ELECTROLYZER: HTBasicDeferredBlockAndItem = + registerMachine(RagiumBlockEntityTypes.ELECTROLYZER) + @JvmField val PRECISION_ASSEMBLER: HTBasicDeferredBlockAndItem = registerMachine(RagiumBlockEntityTypes.PRECISION_ASSEMBLER) @@ -338,12 +338,12 @@ data object RagiumBlocks { put(HTMachineType.CHEMICAL, CHEMICAL_BATH) put(HTMachineType.CHEMICAL, CHEMICAL_REACTOR) - put(HTMachineType.CHEMICAL, ELECTROLYZER) put(HTMachineType.CHEMICAL, MIXER) put(HTMachineType.BIO, BREWERY) put(HTMachineType.BIO, PLANTER) + put(HTMachineType.ELECTRONICS, ELECTROLYZER) put(HTMachineType.ELECTRONICS, PRECISION_ASSEMBLER) put(HTMachineType.ELECTRONICS, SCANNER) 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 d5f311c60..6d3a3079a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -100,10 +100,6 @@ data object RagiumBlockEntityTypes { val CHEMICAL_BATH: HTDeferredBlockEntityType = registerTick(RagiumConstants.CHEMICAL_BATH, ::HTChemicalBathBlockEntity) - @JvmField - val ELECTROLYZER: HTDeferredBlockEntityType = - registerTick(RagiumConstants.ELECTROLYZER, ::HTElectrolyzerBlockEntity) - @JvmField val MIXER: HTDeferredBlockEntityType = registerTick(RagiumConstants.MIXER, ::HTMixerBlockEntity) @@ -118,6 +114,10 @@ data object RagiumBlockEntityTypes { registerTick(RagiumConstants.PLANTER, ::HTPlanterBlockEntity) // Electronics + @JvmField + val ELECTROLYZER: HTDeferredBlockEntityType = + registerTick(RagiumConstants.ELECTROLYZER, ::HTElectrolyzerBlockEntity) + @JvmField val PRECISION_ASSEMBLER: HTDeferredBlockEntityType = registerTick(RagiumConstants.PRECISION_ASSEMBLER, ::HTPrecisionAssemblerBlockEntity) @@ -189,12 +189,12 @@ data object RagiumBlockEntityTypes { registerProcessor(SMELTER.get()) registerProcessor(CHEMICAL_BATH.get()) - registerProcessor(ELECTROLYZER.get()) registerProcessor(MIXER.get()) registerProcessor(BREWERY.get()) registerProcessor(PLANTER.get()) + registerProcessor(ELECTROLYZER.get()) registerProcessor(PRECISION_ASSEMBLER.get()) registerProcessor(ENCHANTER.get()) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt index e5df85222..1e7a03f10 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt @@ -5,13 +5,11 @@ import hiiragi283.lib.gui.HTBackgroundType import hiiragi283.lib.gui.HTSlotHelper import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.handler.HTFluidInputTank -import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.transfer.fluid.HTBasicFluidTank -import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.lib.transfer.useTransaction import hiiragi283.lib.world.getTypedBlockEntity import hiiragi283.ragium.api.RagiumConfig @@ -21,16 +19,13 @@ import hiiragi283.ragium.api.recipe.RagiumRecipeLookups import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes import hiiragi283.ragium.common.block.entity.storage.HTFluidOutputBusBlockEntity import hiiragi283.ragium.common.gui.widget.HTFluidWidget -import hiiragi283.ragium.common.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.core.Direction import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents -import net.minecraft.world.item.ItemInstance import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.storage.ValueInput import net.minecraft.world.level.storage.ValueOutput @@ -40,7 +35,7 @@ import net.neoforged.neoforge.transfer.transaction.Transaction class HTElectrolyzerBlockEntity(pos: BlockPos, state: BlockState) : HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.ELECTROLYZER.get(), pos, state) { - private val cache: HTRecipeCache = + private val cache: HTRecipeCache = HTRecipeCache(RagiumRecipeLookups.ELECTROLYZING) override fun writeValue(output: ValueOutput) { @@ -56,14 +51,13 @@ class HTElectrolyzerBlockEntity(pos: BlockPos, state: BlockState) : override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) recipeHandler = object : EnergizedHandler< - HTItemAndFluidRecipeInput, + HTSingleFluidRecipeInput, RTElectrolyzingRecipe.ElectrolyzedResult, RTElectrolyzingRecipe >() { private val machine: HTElectrolyzerBlockEntity = this@HTElectrolyzerBlockEntity private val front: Direction get() = machine.getFront() private val inputTank: HTFluidInputTank by lazy { HTFluidInputTank(machine.inputTank) } - private val inputSlot: HTItemInputSlot by lazy { HTItemInputSlot(machine.inputSlot) } private val outputTank: HTOutputSlot by lazy { HTOutputSlotHelper.forFluid(machine.outputTank) } private val rightOutputTank: HTOutputSlot? get() = level @@ -75,24 +69,20 @@ class HTElectrolyzerBlockEntity(pos: BlockPos, state: BlockState) : ?.tank ?.let(HTOutputSlotHelper::forFluid) - override fun createInput(): HTItemAndFluidRecipeInput = - HTItemAndFluidRecipeInput(inputSlot.getStoredInput(), inputTank.getStoredInput()) + override fun createInput(): HTSingleFluidRecipeInput = HTSingleFluidRecipeInput(inputTank.getStoredInput()) - override fun findRecipe(level: ServerLevel, input: HTItemAndFluidRecipeInput): RTElectrolyzingRecipe? = + override fun findRecipe(level: ServerLevel, input: HTSingleFluidRecipeInput): RTElectrolyzingRecipe? = cache.findFirstRecipe(input, level) override fun canComplete( recipe: RTElectrolyzingRecipe, - input: HTItemAndFluidRecipeInput, + input: HTSingleFluidRecipeInput, output: RTElectrolyzingRecipe.ElectrolyzedResult ): Boolean = rightOutputTank != null && leftOutputTank != null && useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = - recipe.getMatchingStack(input.item, input.fluid) + val inputConsume: FluidInstance = recipe.getMatchingStack(input.fluid) when { - inputSlot.use(itemInput, transaction).failed -> false - - inputTank.use(fluidInput, transaction).failed -> false + inputTank.use(inputConsume, transaction).failed -> false else -> { val (right: FluidStack, left: FluidStack, main: FluidStack) = output @@ -107,14 +97,12 @@ class HTElectrolyzerBlockEntity(pos: BlockPos, state: BlockState) : override fun onComplete( recipe: RTElectrolyzingRecipe, - input: HTItemAndFluidRecipeInput, + input: HTSingleFluidRecipeInput, output: RTElectrolyzingRecipe.ElectrolyzedResult ) { useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = - recipe.getMatchingStack(input.item, input.fluid) - inputSlot.use(itemInput, transaction) - inputTank.use(fluidInput, transaction) + val inputConsume: FluidInstance = recipe.getMatchingStack(input.fluid) + inputTank.use(inputConsume, transaction) val (right: FluidStack, left: FluidStack, main: FluidStack) = output outputTank.take(main, transaction) rightOutputTank?.take(right, transaction) @@ -134,29 +122,15 @@ class HTElectrolyzerBlockEntity(pos: BlockPos, state: BlockState) : 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)) + addEnergySlot(widgetHolder, HTSlotHelper.getSlotPosX(3.75), HTSlotHelper.getSlotPosY(2)) // 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.getSlotPosX(2), HTSlotHelper.getSlotPosY(0), HTBackgroundType.INPUT, false diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt index f8be09857..a7abc7575 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt @@ -207,6 +207,9 @@ data object RagiumFluids { } // Na + @JvmField + val SALT_WATER: HTFluidContent.Flowing = REGISTER.registerFlowing("salt_water") { properties = liquid() } + @JvmField val NAOH_SOLUTION: HTFluidContent.Flowing = REGISTER.registerFlowing("sodium_hydroxide_solution") { properties = liquid() From 5b2cada28b05b95cdec55def1811bacd0ba18709 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 26 Sep 2026 17:01:17 +0900 Subject: [PATCH 07/14] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=AC=E3=82=B7=E3=83=94=E3=82=BF=E3=82=A4=E3=83=97=E3=80=8C?= =?UTF-8?q?Centrifuging=20/=20=E9=81=A0=E5=BF=83=E5=88=86=E9=9B=A2?= =?UTF-8?q?=E3=80=8D=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integration/jei/RagiumJeiRecipeTypes.kt | 5 ++ .../data/lang/RagiumEnglishLangProvider.kt | 1 + .../data/lang/RagiumJapaneseLangProvider.kt | 1 + .../recipe/RagiumChemicalRecipeProvider.kt | 14 +-- .../data/recipe/RagiumCommonRecipeProvider.kt | 8 ++ .../recipe/RagiumElectronicsRecipeProvider.kt | 14 +++ .../resources/assets/ragium/lang/en_us.json | 1 + .../resources/assets/ragium/lang/ja_jp.json | 1 + .../refining/salt_dust_from_salt_water.json | 16 ++++ .../HTFluidToDoubleFluidRecipeBuilder.kt | 66 ++++++++++++++ .../recipe/base/HTFluidToDoubleFluidRecipe.kt | 88 +++++++++++++++++++ .../hiiragi283/ragium/api/RagiumConstants.kt | 2 + .../recipe/builder/RagiumRecipeBuilders.kt | 13 +++ .../ragium/api/recipe/RTCentrifugingRecipe.kt | 25 ++++++ .../ragium/api/recipe/RagiumRecipeLookups.kt | 4 + .../api/recipe/RagiumRecipeSerializers.kt | 4 + .../ragium/api/recipe/RagiumRecipeTypes.kt | 3 + .../hiiragi283/ragium/common/RagiumCommon.kt | 1 + 18 files changed, 255 insertions(+), 12 deletions(-) create mode 100644 src/generated/resources/data/ragium/recipe/refining/salt_dust_from_salt_water.json create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToDoubleFluidRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToDoubleFluidRecipe.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt 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 cdb9bd557..11d0e340e 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -2,6 +2,7 @@ package hiiragi283.ragium.client.integration.jei import hiiragi283.lib.integration.jei.HTHolderJeiRecipeType import hiiragi283.lib.integration.jei.HTJeiRecipeType +import hiiragi283.lib.recipe.base.HTFluidToDoubleFluidRecipe import hiiragi283.lib.recipe.base.HTFluidToRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe @@ -68,6 +69,10 @@ data object RagiumJeiRecipeTypes { val BATHING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.BATHING, RagiumBlocks.CHEMICAL_BATH) + @JvmField + val CENTRIFUGING: HTHolderJeiRecipeType = + HTJeiRecipeType(RagiumRecipeTypes.CENTRIFUGING, RagiumBlocks.CHEMICAL_BATH) + @JvmField val MIXING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.MIXING, RagiumBlocks.MIXER) diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index eb78fe1e6..f5adf30a9 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -178,6 +178,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumRecipeTypes.REFINING, "Refining") add(RagiumRecipeTypes.BATHING, "Chemical Bathing") + add(RagiumRecipeTypes.CENTRIFUGING, "Centrifuging") add(RagiumRecipeTypes.MIXING, "Mixing") add(RagiumRecipeTypes.REACTING, "Chemical Reacting") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 41cd0f986..21d1bb610 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -174,6 +174,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumRecipeTypes.REFINING, "蒸留") add(RagiumRecipeTypes.BATHING, "化学洗浄") + add(RagiumRecipeTypes.CENTRIFUGING, "遠心分離") add(RagiumRecipeTypes.MIXING, "混合") add(RagiumRecipeTypes.REACTING, "化学反応") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt index 49ffcb485..45eb78b79 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt @@ -17,7 +17,7 @@ class RagiumChemicalRecipeProvider(packOutput: PackOutput, future: CompletableFu HTRecipeProvider(packOutput, future, RagiumAPI.MOD_ID) { override fun exportValues() { bathing() - electrolyzing() + centrifuging() } private fun bathing() { @@ -53,17 +53,7 @@ class RagiumChemicalRecipeProvider(packOutput: PackOutput, future: CompletableFu }.save(exporter) } - private fun electrolyzing() { - // 2x H2O -> 2x H2 + O2 - RagiumRecipeBuilders.electrolyzing { - ingredient { +waterSet() } - result { +RagiumFluids.HYDROGEN } - result { - +RagiumFluids.OXYGEN - amount /= 2 - } - recipeId suffix "_from_water" - }.save(exporter) + private fun centrifuging() { } override fun getName(): String = "Chemical Recipes" diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index cad42f0e2..c87cbfff4 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -305,6 +305,14 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu } recipeId suffix "_from_block" }.save(exporter) + // NaCl(aq) -> H2O + NaCl + RagiumRecipeBuilders.refining { + ingredient { +holderSet(RagiumFluids.SALT_WATER) } + fluidResult { +Fluids.WATER } + itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.SALT) } + recipeId replace id("salt_dust_from_salt_water") + }.save(exporter) + // 2x NaCl + H2SO4 -> 2x HCl + Na2SO4 RagiumRecipeBuilders.mixing { itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SALT) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt index 448369717..bebd215fa 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt @@ -14,9 +14,23 @@ import java.util.concurrent.CompletableFuture class RagiumElectronicsRecipeProvider(packOutput: PackOutput, future: CompletableFuture) : HTRecipeProvider(packOutput, future, RagiumAPI.MOD_ID) { override fun exportValues() { + electrolyzing() resourceExtracting() } + private fun electrolyzing() { + // 2x H2O -> 2x H2 + O2 + RagiumRecipeBuilders.electrolyzing { + ingredient { +waterSet() } + result { +RagiumFluids.HYDROGEN } + result { + +RagiumFluids.OXYGEN + amount /= 2 + } + recipeId suffix "_from_water" + }.save(exporter) + } + private fun resourceExtracting() { // XX -> Water RagiumRecipeBuilders.resourceExtracting { diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 6c26890ca..11e986b12 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -354,6 +354,7 @@ "recipe_type.ragium.assembling": "Assembling", "recipe_type.ragium.bathing": "Chemical Bathing", "recipe_type.ragium.brewing": "Brewing", + "recipe_type.ragium.centrifuging": "Centrifuging", "recipe_type.ragium.compressing": "Compressing", "recipe_type.ragium.crushing": "Crushing", "recipe_type.ragium.cutting": "Cutting", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 4211ec951..31781885e 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -354,6 +354,7 @@ "recipe_type.ragium.assembling": "組立", "recipe_type.ragium.bathing": "化学洗浄", "recipe_type.ragium.brewing": "醸造", + "recipe_type.ragium.centrifuging": "遠心分離", "recipe_type.ragium.compressing": "圧縮", "recipe_type.ragium.crushing": "粉砕", "recipe_type.ragium.cutting": "切断", diff --git a/src/generated/resources/data/ragium/recipe/refining/salt_dust_from_salt_water.json b/src/generated/resources/data/ragium/recipe/refining/salt_dust_from_salt_water.json new file mode 100644 index 000000000..82817b0d9 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/refining/salt_dust_from_salt_water.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:refining", + "fluid_result": { + "amount": 1000, + "id": "minecraft:water" + }, + "ingredient": { + "amount": 1000, + "fluids": "#c:salt_water" + }, + "item_result": { + "count": 1, + "id": "ragium:salt_dust" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToDoubleFluidRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToDoubleFluidRecipeBuilder.kt new file mode 100644 index 000000000..fb5eea8b7 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToDoubleFluidRecipeBuilder.kt @@ -0,0 +1,66 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.recipe.builder + +import hiiragi283.lib.collection.Nel +import hiiragi283.lib.collection.toNel +import hiiragi283.lib.data.recipe.ingredient.HTFluidIngredientBuilder +import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder +import hiiragi283.lib.recipe.base.HTProgressData +import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.result.HTFluidResult +import hiiragi283.lib.util.HTDelegates +import it.unimi.dsi.fastutil.objects.ObjectArrayList +import net.minecraft.resources.Identifier +import net.minecraft.world.item.crafting.Recipe +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * 1種類の液体から2種類の液体を作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +class HTFluidToDoubleFluidRecipeBuilder>(prefix: String, private val factory: Factory) : + HTProgressRecipeBuilder(prefix) { + override fun getRecipeId(): Identifier? = results.first().getId() + + override fun createRecipe(): RECIPE = factory.create(ingredient, results.toNel(), progressData) + + // Ingredient + @PublishedApi internal var ingredient: HTFluidIngredient by HTDelegates.onceInitialize() + + operator fun HTFluidIngredient.unaryPlus() { + ingredient = this + } + + inline fun ingredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTFluidIngredientBuilder.build(builderAction) + } + + // Result + @PublishedApi internal val results: MutableList = ObjectArrayList() + + inline fun result(builderAction: HTFluidResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + results += HTFluidResultBuilder.build(builderAction) + } + + // Factory // + + /** + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ + fun interface Factory { + fun create(ingredient: HTFluidIngredient, results: Nel, progressData: HTProgressData): RECIPE + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToDoubleFluidRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToDoubleFluidRecipe.kt new file mode 100644 index 000000000..37803ee60 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToDoubleFluidRecipe.kt @@ -0,0 +1,88 @@ +package hiiragi283.lib.recipe.base + +import com.mojang.serialization.MapCodec +import hiiragi283.lib.HTConstants +import hiiragi283.lib.collection.Nel +import hiiragi283.lib.data.recipe.builder.HTFluidToDoubleFluidRecipeBuilder +import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput +import hiiragi283.lib.recipe.result.HTFluidResult +import hiiragi283.lib.recipe.result.createOrEmpty +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.codec.compactNelFieldOf +import hiiragi283.lib.serialization.network.nelOf +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.StreamCodec +import net.neoforged.neoforge.fluids.FluidInstance +import net.neoforged.neoforge.fluids.FluidStack + +/** + * 1種類の液体から2種類の液体を作成するレシピを表すインターフェースです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +interface HTFluidToDoubleFluidRecipe : + HTRecipePredicates.SingleFluid, + HTRecipeFactories.SingleFluidTo>, + HTProgressRecipe { + + fun asSingleOutput(): HTFluidToFluidRecipe = object : HTFluidToFluidRecipe { + override fun test(input: FluidInstance): Boolean = this@HTFluidToDoubleFluidRecipe.test(input) + + override fun getMatchingStack(input: FluidInstance): FluidInstance = + this@HTFluidToDoubleFluidRecipe.getMatchingStack(input) + + override fun apply(input: FluidInstance): FluidStack = this@HTFluidToDoubleFluidRecipe.apply(input).first + + override fun getProgressData(input: HTSingleFluidRecipeInput): HTProgressData = + this@HTFluidToDoubleFluidRecipe.getProgressData(input) + } + + /** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ + open class Basic( + val ingredient: HTFluidIngredient, + val result: Nel, + override val progressData: HTProgressData + ) : HTFluidToDoubleFluidRecipe, + HTProgressRecipe.Simple { + companion object { + @JvmStatic + fun codec(factory: HTFluidToDoubleFluidRecipeBuilder.Factory): MapCodec = + HTCodecs.recordMap { instance -> + instance.group( + HTFluidIngredient.CODEC.fieldOf(HTConstants.INGREDIENT).forGetter(Basic::ingredient), + HTFluidResult.CODEC + .compactNelFieldOf(HTConstants.RESULT, HTConstants.RESULTS, 2) + .forGetter(Basic::result), + HTProgressData.CODEC.forGetter(Basic::progressData) + ).apply(instance, factory::create) + } + + @JvmField + val SIMPLE_CODEC: MapCodec = codec(::Basic) + + @JvmStatic + fun streamCodec( + factory: HTFluidToDoubleFluidRecipeBuilder.Factory + ): StreamCodec = StreamCodec.composite( + HTFluidIngredient.STREAM_CODEC, + Basic::ingredient, + HTFluidResult.STREAM_CODEC.nelOf(), + Basic::result, + HTProgressData.STREAM_CODEC, + Basic::progressData, + factory::create + ) + } + + override fun test(input: FluidInstance): Boolean = ingredient.test(input) + + override fun apply(input: FluidInstance): Pair = + result.head.create() to result.getOrNull(1).createOrEmpty() + + override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt index 3f6117868..c08a4cadf 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt @@ -23,6 +23,7 @@ data object RagiumConstants { const val SMELTER = "smelter" // Chemical + const val CENTRIFUGE = "centrifuge" const val CHEMICAL_BATH = "chemical_bath" const val CHEMICAL_REACTOR = "chemical_reactor" const val MIXER = "mixer" @@ -60,6 +61,7 @@ data object RagiumConstants { // Chemical const val BATHING = "bathing" + const val CENTRIFUGING = "centrifuging" const val MIXING = "mixing" const val REACTING = "reacting" 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 a1fe91fbe..8e4e107e4 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,6 +2,7 @@ package hiiragi283.ragium.api.data.recipe.builder +import hiiragi283.lib.data.recipe.builder.HTFluidToDoubleFluidRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTFluidToRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemAndFluidToRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemToDoubleItemRecipeBuilder @@ -13,6 +14,7 @@ import hiiragi283.ragium.api.recipe.RTAlloyingRecipe import hiiragi283.ragium.api.recipe.RTAssemblingRecipe import hiiragi283.ragium.api.recipe.RTBathingRecipe import hiiragi283.ragium.api.recipe.RTBrewingRecipe +import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe import hiiragi283.ragium.api.recipe.RTCompressingRecipe import hiiragi283.ragium.api.recipe.RTCrushingRecipe import hiiragi283.ragium.api.recipe.RTCuttingRecipe @@ -155,6 +157,17 @@ data object RagiumRecipeBuilders { return HTItemAndFluidToRecipeBuilder.ToItem(RagiumConstants.BATHING, ::RTBathingRecipe).apply(builderAction) } + @JvmStatic + inline fun centrifuging( + builderAction: HTFluidToDoubleFluidRecipeBuilder.() -> Unit + ): HTFluidToDoubleFluidRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return HTFluidToDoubleFluidRecipeBuilder(RagiumConstants.CENTRIFUGING, ::RTCentrifugingRecipe) + .apply(builderAction) + } + @JvmStatic inline fun mixing( builderAction: HTItemAndFluidToRecipeBuilder.ToFluid.() -> Unit diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt new file mode 100644 index 000000000..d935afbb5 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt @@ -0,0 +1,25 @@ +package hiiragi283.ragium.api.recipe + +import hiiragi283.lib.collection.Nel +import hiiragi283.lib.recipe.HTRecipeType +import hiiragi283.lib.recipe.HTSerializableRecipe +import hiiragi283.lib.recipe.base.HTFluidToDoubleFluidRecipe +import hiiragi283.lib.recipe.base.HTProgressData +import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput +import hiiragi283.lib.recipe.result.HTFluidResult +import net.minecraft.world.item.crafting.RecipeSerializer + +class RTCentrifugingRecipe(ingredient: HTFluidIngredient, result: Nel, progressData: HTProgressData) : + HTFluidToDoubleFluidRecipe.Basic(ingredient, result, progressData), + HTSerializableRecipe { + companion object { + @JvmField + val SERIALIZER: RecipeSerializer = + RecipeSerializer(codec(::RTCentrifugingRecipe), streamCodec(::RTCentrifugingRecipe)) + } + + override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.CENTRIFUGING + + override fun getType(): HTRecipeType = RagiumRecipeTypes.CENTRIFUGING +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt index a24aec660..69c95d1c7 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt @@ -1,6 +1,7 @@ package hiiragi283.ragium.api.recipe import hiiragi283.lib.recipe.HTRecipeType +import hiiragi283.lib.recipe.base.HTFluidToDoubleFluidRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToFluidRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe @@ -70,6 +71,9 @@ data object RagiumRecipeLookups { @JvmField val BATHING: HTCompoundRecipeLookup = create(RagiumConstants.BATHING) + @JvmField + val CENTRIFUGING: HTCompoundRecipeLookup = create(RagiumConstants.CENTRIFUGING) + @JvmField val MIXING: HTCompoundRecipeLookup = create(RagiumConstants.MIXING) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt index 0d1a26c55..e79023fa6 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt @@ -87,6 +87,10 @@ data object RagiumRecipeSerializers { val BATHING: RecipeSerializer = register(RagiumConstants.BATHING, RTBathingRecipe.SERIALIZER) + @JvmField + val CENTRIFUGING: RecipeSerializer = + register(RagiumConstants.CENTRIFUGING, RTCentrifugingRecipe.SERIALIZER) + @JvmField val MIXING: RecipeSerializer = register(RagiumConstants.MIXING, RTMixingRecipe.SERIALIZER) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index 49255eb1b..ec771be79 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -67,6 +67,9 @@ data object RagiumRecipeTypes { @JvmField val BATHING: HTRecipeType = create(RagiumConstants.BATHING) + @JvmField + val CENTRIFUGING: HTRecipeType = create(RagiumConstants.CENTRIFUGING) + @JvmField val MIXING: HTRecipeType = create(RagiumConstants.MIXING) diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index b191c67d0..122d1c04a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -130,6 +130,7 @@ internal data object RagiumCommon { RagiumRecipeLookups.PYROLYZING.fromRecipeType(RagiumRecipeTypes.PYROLYZING, identity()) RagiumRecipeLookups.BATHING.fromRecipeType(RagiumRecipeTypes.BATHING, identity()) + RagiumRecipeLookups.CENTRIFUGING.fromRecipeType(RagiumRecipeTypes.CENTRIFUGING, identity()) RagiumRecipeLookups.MIXING.fromRecipeType(RagiumRecipeTypes.MIXING, identity()) RagiumRecipeLookups.REACTING.fromRecipeType(RagiumRecipeTypes.REACTING, identity()) From 9230bd029a81d60d6960cc9400b68418985048f2 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 26 Sep 2026 18:01:37 +0900 Subject: [PATCH 08/14] =?UTF-8?q?refactor:=201:1=E3=81=A7=E5=A4=89?= =?UTF-8?q?=E6=8F=9B=E3=81=99=E3=82=8B=E3=83=AC=E3=82=B7=E3=83=94=E3=81=AE?= =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E3=82=92=E5=85=B1=E9=80=9A=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/recipe/RagiumArcaneRecipeProvider.kt | 2 + .../data/recipe/RagiumCommonRecipeProvider.kt | 2 + .../data/recipe/RagiumHeatRecipeProvider.kt | 2 + .../recipe/RagiumMechanicalRecipeProvider.kt | 2 + .../recipe/builder/HTFluidToRecipeBuilder.kt | 95 ------------- .../recipe/builder/HTItemToRecipeBuilder.kt | 95 ------------- .../recipe/builder/HTSingleRecipeBuilder.kt | 130 ++++++++++++++++++ .../lib/recipe/base/HTBasicSingleRecipe.kt | 68 +++++++++ .../lib/recipe/base/HTFluidToRecipe.kt | 96 +++++-------- .../lib/recipe/base/HTItemToRecipe.kt | 93 ++++--------- .../recipe/builder/RagiumRecipeBuilders.kt | 30 ++-- 11 files changed, 286 insertions(+), 329 deletions(-) delete mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToRecipeBuilder.kt delete mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemToRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTSingleRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumArcaneRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumArcaneRecipeProvider.kt index 7914fa1f2..952ebe860 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumArcaneRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumArcaneRecipeProvider.kt @@ -1,6 +1,8 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.data.recipe.HTRecipeProvider +import hiiragi283.lib.data.recipe.builder.ingredient +import hiiragi283.lib.data.recipe.builder.result import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index c87cbfff4..080d88945 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -3,6 +3,8 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.collection.nelOf import hiiragi283.lib.color.VanillaColoredCollections import hiiragi283.lib.data.recipe.HTRecipeProvider +import hiiragi283.lib.data.recipe.builder.ingredient +import hiiragi283.lib.data.recipe.builder.result import hiiragi283.lib.recipe.ingredient.HTMaterialTagsIngredient import hiiragi283.lib.registry.HTFluidContent import hiiragi283.lib.tag.CommonTagPrefixes diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 6610f3b0d..c99252298 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -2,6 +2,8 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.collection.nelOf import hiiragi283.lib.data.recipe.HTRecipeProvider +import hiiragi283.lib.data.recipe.builder.ingredient +import hiiragi283.lib.data.recipe.builder.result import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index bbdd793e7..a693b4dbb 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -3,6 +3,8 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.color.HTColoredCollection import hiiragi283.lib.color.VanillaColoredCollections import hiiragi283.lib.data.recipe.HTRecipeProvider +import hiiragi283.lib.data.recipe.builder.ingredient +import hiiragi283.lib.data.recipe.builder.result import hiiragi283.lib.data.recipe.ingredient.HTItemIngredientBuilder import hiiragi283.lib.registry.HTSimpleDeferredItem import hiiragi283.lib.resource.debugPath diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToRecipeBuilder.kt deleted file mode 100644 index 33ad0d067..000000000 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToRecipeBuilder.kt +++ /dev/null @@ -1,95 +0,0 @@ -@file:OptIn(ExperimentalContracts::class) - -package hiiragi283.lib.data.recipe.builder - -import hiiragi283.lib.data.recipe.ingredient.HTFluidIngredientBuilder -import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder -import hiiragi283.lib.data.recipe.result.HTItemResultBuilder -import hiiragi283.lib.recipe.base.HTProgressData -import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.result.HTFluidResult -import hiiragi283.lib.recipe.result.HTItemResult -import hiiragi283.lib.recipe.result.HTRecipeResult -import hiiragi283.lib.util.HTDelegates -import net.minecraft.resources.Identifier -import net.minecraft.world.item.crafting.Recipe -import kotlin.contracts.ExperimentalContracts -import kotlin.contracts.InvocationKind -import kotlin.contracts.contract - -abstract class HTFluidToRecipeBuilder, out RECIPE : Recipe<*>>( - prefix: String, - private val factory: Factory -) : HTProgressRecipeBuilder(prefix) { - override fun getRecipeId(): Identifier? = result.getId() - - override fun createRecipe(): RECIPE = factory.create(ingredient, result, progressData) - - // Ingredient - @PublishedApi internal var ingredient: HTFluidIngredient by HTDelegates.onceInitialize() - - operator fun HTFluidIngredient.unaryPlus() { - ingredient = this - } - - inline fun ingredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTFluidIngredientBuilder.build(builderAction) - } - - // Result - @PublishedApi internal var result: RESULT by HTDelegates.onceInitialize() - - operator fun RESULT.unaryPlus() { - result = this - } - - // ToFluid // - - /** - * 1種類のアイテムと液体から1種類の液体を作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ - class ToFluid>(prefix: String, factory: Factory) : - HTFluidToRecipeBuilder(prefix, factory) { - inline fun result(builderAction: HTFluidResultBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTFluidResultBuilder.build(builderAction) - } - } - - // ToItem // - - /** - * 1種類のアイテムと液体から1種類のアイテムを作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ - class ToItem>(prefix: String, factory: Factory) : - HTFluidToRecipeBuilder(prefix, factory) { - inline fun result(builderAction: HTItemResultBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTItemResultBuilder.build(builderAction) - } - } - - // Factory // - - /** - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ - fun interface Factory, out RECIPE : Any> { - fun create(ingredient: HTFluidIngredient, result: RESULT, progressData: HTProgressData): RECIPE - } -} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemToRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemToRecipeBuilder.kt deleted file mode 100644 index 09fa1f660..000000000 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemToRecipeBuilder.kt +++ /dev/null @@ -1,95 +0,0 @@ -@file:OptIn(ExperimentalContracts::class) - -package hiiragi283.lib.data.recipe.builder - -import hiiragi283.lib.data.recipe.ingredient.HTItemIngredientBuilder -import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder -import hiiragi283.lib.data.recipe.result.HTItemResultBuilder -import hiiragi283.lib.recipe.base.HTProgressData -import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.result.HTFluidResult -import hiiragi283.lib.recipe.result.HTItemResult -import hiiragi283.lib.recipe.result.HTRecipeResult -import hiiragi283.lib.util.HTDelegates -import net.minecraft.resources.Identifier -import net.minecraft.world.item.crafting.Recipe -import kotlin.contracts.ExperimentalContracts -import kotlin.contracts.InvocationKind -import kotlin.contracts.contract - -abstract class HTItemToRecipeBuilder, out RECIPE : Recipe<*>>( - prefix: String, - private val factory: Factory -) : HTProgressRecipeBuilder(prefix) { - override fun getRecipeId(): Identifier? = result.getId() - - override fun createRecipe(): RECIPE = factory.create(ingredient, result, progressData) - - // Ingredient - @PublishedApi internal var ingredient: HTItemIngredient by HTDelegates.onceInitialize() - - operator fun HTItemIngredient.unaryPlus() { - ingredient = this - } - - inline fun ingredient(builderAction: HTItemIngredientBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTItemIngredientBuilder.build(builderAction) - } - - // Result - @PublishedApi internal var result: RESULT by HTDelegates.onceInitialize() - - operator fun RESULT.unaryPlus() { - result = this - } - - // ToFluid // - - /** - * 1種類のアイテムと液体から1種類の液体を作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - class ToFluid>(prefix: String, factory: Factory) : - HTItemToRecipeBuilder(prefix, factory) { - inline fun result(builderAction: HTFluidResultBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTFluidResultBuilder.build(builderAction) - } - } - - // ToItem // - - /** - * 1種類のアイテムと液体から1種類のアイテムを作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - class ToItem>(prefix: String, factory: Factory) : - HTItemToRecipeBuilder(prefix, factory) { - inline fun result(builderAction: HTItemResultBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTItemResultBuilder.build(builderAction) - } - } - - // Factory // - - /** - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ - fun interface Factory, out RECIPE : Any> { - fun create(ingredient: HTItemIngredient, result: RESULT, progressData: HTProgressData): RECIPE - } -} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTSingleRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTSingleRecipeBuilder.kt new file mode 100644 index 000000000..55590a561 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTSingleRecipeBuilder.kt @@ -0,0 +1,130 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.recipe.builder + +import hiiragi283.lib.data.recipe.ingredient.HTFluidIngredientBuilder +import hiiragi283.lib.data.recipe.ingredient.HTItemIngredientBuilder +import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder +import hiiragi283.lib.data.recipe.result.HTItemResultBuilder +import hiiragi283.lib.recipe.base.HTBasicSingleRecipe +import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.ingredient.HTIngredient +import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.result.HTFluidResult +import hiiragi283.lib.recipe.result.HTItemResult +import hiiragi283.lib.recipe.result.HTRecipeResult +import hiiragi283.lib.util.HTDelegates +import net.minecraft.resources.Identifier +import net.minecraft.world.item.crafting.Recipe +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * 1種類の材料から1種類の完成品を作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 + * @param ING レシピの材料を判定するクラス + * @param RES レシピの完成品を提供するクラス + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +open class HTSingleRecipeBuilder, RES : HTRecipeResult<*>, out RECIPE : Recipe<*>>( + prefix: String, + private val factory: HTBasicSingleRecipe.Factory +) : HTProgressRecipeBuilder(prefix) { + final override fun getRecipeId(): Identifier? = result.getId() + + final override fun createRecipe(): RECIPE = factory.create(ingredient, result, progressData) + + // Ingredient + var ingredient: ING by HTDelegates.onceInitialize() + + operator fun ING.unaryPlus() { + ingredient = this + } + + // Result + var result: RES by HTDelegates.onceInitialize() + + operator fun RES.unaryPlus() { + result = this + } +} + +// Extensions // + +/** + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +typealias HTFluidToFluidRecipeBuilder = HTSingleRecipeBuilder + +/** + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +typealias HTFluidToItemRecipeBuilder = HTSingleRecipeBuilder + +/** + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +typealias HTItemToFluidRecipeBuilder = HTSingleRecipeBuilder + +/** + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +typealias HTItemToItemRecipeBuilder = HTSingleRecipeBuilder + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmName("itemIngredient") +fun HTSingleRecipeBuilder.ingredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTFluidIngredientBuilder.build(builderAction) +} + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmName("fluidIngredient") +fun HTSingleRecipeBuilder.ingredient(builderAction: HTItemIngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTItemIngredientBuilder.build(builderAction) +} + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmName("itemResult") +fun HTSingleRecipeBuilder<*, HTFluidResult, *>.result(builderAction: HTFluidResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTFluidResultBuilder.build(builderAction) +} + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmName("fluidResult") +fun HTSingleRecipeBuilder<*, HTItemResult, *>.result(builderAction: HTItemResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTItemResultBuilder.build(builderAction) +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt new file mode 100644 index 000000000..8163d9da3 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt @@ -0,0 +1,68 @@ +package hiiragi283.lib.recipe.base + +import com.mojang.serialization.Codec +import com.mojang.serialization.MapCodec +import hiiragi283.lib.HTConstants +import hiiragi283.lib.recipe.ingredient.HTIngredient +import hiiragi283.lib.recipe.result.HTRecipeResult +import hiiragi283.lib.serialization.codec.HTCodecs +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.StreamCodec +import net.minecraft.world.item.crafting.RecipeInput + +/** + * 1種類の材料から1種類の完成品を作成するレシピを表す抽象クラスです。 + * @param INPUT レシピの入力となるクラス + * @param ING レシピの材料を判定するクラス + * @param RES レシピの完成品を提供するクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +open class HTBasicSingleRecipe, RES : HTRecipeResult<*>>( + val ingredient: ING, + val result: RES, + override val progressData: HTProgressData +) : HTProgressRecipe.Simple { + companion object { + @JvmStatic + fun , RES : HTRecipeResult<*>, RECIPE : HTBasicSingleRecipe<*, ING, RES>> codec( + ingredient: Codec, + result: Codec, + factory: Factory + ): MapCodec = HTCodecs.recordMap { instance -> + instance.group( + ingredient.fieldOf(HTConstants.INGREDIENT).forGetter { it.ingredient }, + result.fieldOf(HTConstants.RESULT).forGetter { it.result }, + HTProgressData.CODEC.forGetter { it.progressData } + ).apply(instance, factory::create) + } + + @JvmStatic + fun , RES : HTRecipeResult<*>, RECIPE : HTBasicSingleRecipe<*, ING, RES>> streamCodec( + ingredient: StreamCodec, + result: StreamCodec, + factory: Factory + ): StreamCodec = StreamCodec.composite( + ingredient, + { it.ingredient }, + result, + { it.result }, + HTProgressData.STREAM_CODEC, + { it.progressData }, + factory::create + ) + } + + // Factory // + + /** + * @param ING レシピの材料を判定するクラス + * @param RES レシピの完成品を提供するクラス + * @param RECIPE 出力するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ + fun interface Factory, RES : HTRecipeResult<*>, out RECIPE : Any> { + fun create(ingredient: ING, result: RES, progressData: HTProgressData): RECIPE + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt index 15bf26d1c..86e54f0ee 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt @@ -1,15 +1,10 @@ package hiiragi283.lib.recipe.base -import com.mojang.serialization.Codec import com.mojang.serialization.MapCodec -import hiiragi283.lib.HTConstants -import hiiragi283.lib.data.recipe.builder.HTFluidToRecipeBuilder import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.recipe.result.HTItemResult -import hiiragi283.lib.recipe.result.HTRecipeResult -import hiiragi283.lib.serialization.codec.HTCodecs import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec import net.minecraft.world.item.ItemStack @@ -40,73 +35,38 @@ interface HTFluidToRecipe : HTRecipeFactories.SingleFluidTo, HTProgressRecipe { - /** - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ - open class Basic>( - val ingredient: HTFluidIngredient, - val result: RESULT, - override val progressData: HTProgressData - ) : HTFluidToRecipe, - HTProgressRecipe.Simple { - companion object { - @JvmStatic - fun , RECIPE : Basic> codec( - resultCodec: Codec, - factory: HTFluidToRecipeBuilder.Factory - ): MapCodec = HTCodecs.recordMap { instance -> - instance.group( - HTFluidIngredient.CODEC - .fieldOf(HTConstants.INGREDIENT) - .forGetter(Basic::ingredient), - resultCodec.fieldOf(HTConstants.RESULT).forGetter(Basic::result), - HTProgressData.CODEC.forGetter(Basic::progressData) - ).apply(instance, factory::create) - } - - @JvmStatic - fun , RECIPE : Basic> streamCodec( - resultCodec: StreamCodec, - factory: HTFluidToRecipeBuilder.Factory - ): StreamCodec = StreamCodec.composite( - HTFluidIngredient.STREAM_CODEC, - Basic::ingredient, - resultCodec, - Basic::result, - HTProgressData.STREAM_CODEC, - Basic::progressData, - factory::create - ) - } - - override fun test(input: FluidInstance): Boolean = ingredient.test(input) - - override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) - - override fun apply(input: FluidInstance): OUTPUT = result.create() - } - /** * @author Hiiragi Tsubasa * @since 26.1.5 */ open class BasicItem(ingredient: HTFluidIngredient, result: HTItemResult, progressData: HTProgressData) : - Basic(ingredient, result, progressData) { + HTBasicSingleRecipe( + ingredient, + result, + progressData + ), + HTFluidToRecipe { companion object { @JvmStatic fun codec( - factory: HTFluidToRecipeBuilder.Factory - ): MapCodec = codec(HTItemResult.CODEC, factory) + factory: Factory + ): MapCodec = codec(HTFluidIngredient.CODEC, HTItemResult.CODEC, factory) @JvmStatic fun streamCodec( - factory: HTFluidToRecipeBuilder.Factory - ): StreamCodec = streamCodec(HTItemResult.STREAM_CODEC, factory) + factory: Factory + ): StreamCodec = + streamCodec(HTFluidIngredient.STREAM_CODEC, HTItemResult.STREAM_CODEC, factory) @JvmField val SIMPLE_CODEC: MapCodec = codec(::BasicItem) } + + override fun test(input: FluidInstance): Boolean = ingredient.test(input) + + override fun apply(input: FluidInstance): ItemStack = result.create() + + override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) } /** @@ -114,20 +74,32 @@ interface HTFluidToRecipe : * @since 26.1.5 */ open class BasicFluid(ingredient: HTFluidIngredient, result: HTFluidResult, progressData: HTProgressData) : - Basic(ingredient, result, progressData) { + HTBasicSingleRecipe( + ingredient, + result, + progressData + ), + HTFluidToRecipe { companion object { @JvmStatic fun codec( - factory: HTFluidToRecipeBuilder.Factory - ): MapCodec = codec(HTFluidResult.CODEC, factory) + factory: Factory + ): MapCodec = codec(HTFluidIngredient.CODEC, HTFluidResult.CODEC, factory) @JvmStatic fun streamCodec( - factory: HTFluidToRecipeBuilder.Factory - ): StreamCodec = streamCodec(HTFluidResult.STREAM_CODEC, factory) + factory: Factory + ): StreamCodec = + streamCodec(HTFluidIngredient.STREAM_CODEC, HTFluidResult.STREAM_CODEC, factory) @JvmField val SIMPLE_CODEC: MapCodec = codec(::BasicFluid) } + + override fun test(input: FluidInstance): Boolean = ingredient.test(input) + + override fun apply(input: FluidInstance): FluidStack = result.create() + + override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt index 29763d990..807caf0d5 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt @@ -1,14 +1,9 @@ package hiiragi283.lib.recipe.base -import com.mojang.serialization.Codec import com.mojang.serialization.MapCodec -import hiiragi283.lib.HTConstants -import hiiragi283.lib.data.recipe.builder.HTItemToRecipeBuilder import hiiragi283.lib.recipe.ingredient.HTItemIngredient import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.recipe.result.HTItemResult -import hiiragi283.lib.recipe.result.HTRecipeResult -import hiiragi283.lib.serialization.codec.HTCodecs import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec import net.minecraft.world.item.ItemInstance @@ -40,73 +35,33 @@ interface HTItemToRecipe : HTRecipeFactories.SingleItemTo, HTProgressRecipe { - /** - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - open class Basic>( - val ingredient: HTItemIngredient, - val result: RESULT, - override val progressData: HTProgressData - ) : HTItemToRecipe, - HTProgressRecipe.Simple { - companion object { - @JvmStatic - fun , RECIPE : Basic> codec( - resultCodec: Codec, - factory: HTItemToRecipeBuilder.Factory - ): MapCodec = HTCodecs.recordMap { instance -> - instance.group( - HTItemIngredient.CODEC - .fieldOf(HTConstants.INGREDIENT) - .forGetter(Basic::ingredient), - resultCodec.fieldOf(HTConstants.RESULT).forGetter(Basic::result), - HTProgressData.CODEC.forGetter(Basic::progressData) - ).apply(instance, factory::create) - } - - @JvmStatic - fun , RECIPE : Basic> streamCodec( - resultCodec: StreamCodec, - factory: HTItemToRecipeBuilder.Factory - ): StreamCodec = StreamCodec.composite( - HTItemIngredient.STREAM_CODEC, - Basic::ingredient, - resultCodec, - Basic::result, - HTProgressData.STREAM_CODEC, - Basic::progressData, - factory::create - ) - } - - override fun test(input: ItemInstance): Boolean = ingredient.test(input) - - override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) - - override fun apply(input: ItemInstance): OUTPUT = result.create() - } - /** * @author Hiiragi Tsubasa * @since 26.1.5 */ open class BasicItem(ingredient: HTItemIngredient, result: HTItemResult, progressData: HTProgressData) : - Basic(ingredient, result, progressData) { + HTBasicSingleRecipe(ingredient, result, progressData), + HTItemToRecipe { companion object { @JvmStatic - fun codec( - factory: HTItemToRecipeBuilder.Factory - ): MapCodec = codec(HTItemResult.CODEC, factory) + fun codec(factory: Factory): MapCodec = + codec(HTItemIngredient.CODEC, HTItemResult.CODEC, factory) @JvmStatic fun streamCodec( - factory: HTItemToRecipeBuilder.Factory - ): StreamCodec = streamCodec(HTItemResult.STREAM_CODEC, factory) + factory: Factory + ): StreamCodec = + streamCodec(HTItemIngredient.STREAM_CODEC, HTItemResult.STREAM_CODEC, factory) @JvmField val SIMPLE_CODEC: MapCodec = codec(::BasicItem) } + + override fun test(input: ItemInstance): Boolean = ingredient.test(input) + + override fun apply(input: ItemInstance): ItemStack = result.create() + + override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) } /** @@ -114,20 +69,32 @@ interface HTItemToRecipe : * @since 26.1.5 */ open class BasicFluid(ingredient: HTItemIngredient, result: HTFluidResult, progressData: HTProgressData) : - Basic(ingredient, result, progressData) { + HTBasicSingleRecipe( + ingredient, + result, + progressData + ), + HTItemToRecipe { companion object { @JvmStatic fun codec( - factory: HTItemToRecipeBuilder.Factory - ): MapCodec = codec(HTFluidResult.CODEC, factory) + factory: Factory + ): MapCodec = codec(HTItemIngredient.CODEC, HTFluidResult.CODEC, factory) @JvmStatic fun streamCodec( - factory: HTItemToRecipeBuilder.Factory - ): StreamCodec = streamCodec(HTFluidResult.STREAM_CODEC, factory) + factory: Factory + ): StreamCodec = + streamCodec(HTItemIngredient.STREAM_CODEC, HTFluidResult.STREAM_CODEC, factory) @JvmField val SIMPLE_CODEC: MapCodec = codec(::BasicFluid) } + + override fun test(input: ItemInstance): Boolean = ingredient.test(input) + + override fun apply(input: ItemInstance): FluidStack = result.create() + + override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) } } 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 8e4e107e4..d44734c42 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 @@ -3,11 +3,13 @@ package hiiragi283.ragium.api.data.recipe.builder import hiiragi283.lib.data.recipe.builder.HTFluidToDoubleFluidRecipeBuilder -import hiiragi283.lib.data.recipe.builder.HTFluidToRecipeBuilder +import hiiragi283.lib.data.recipe.builder.HTFluidToItemRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemAndFluidToRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemToDoubleItemRecipeBuilder +import hiiragi283.lib.data.recipe.builder.HTItemToFluidRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemToItemAndFluidRecipeBuilder -import hiiragi283.lib.data.recipe.builder.HTItemToRecipeBuilder +import hiiragi283.lib.data.recipe.builder.HTItemToItemRecipeBuilder +import hiiragi283.lib.data.recipe.builder.HTSingleRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTTripleItemToItemRecipeBuilder import hiiragi283.ragium.api.RagiumConstants import hiiragi283.ragium.api.recipe.RTAlloyingRecipe @@ -49,12 +51,12 @@ data object RagiumRecipeBuilders { @JvmStatic inline fun compressing( - builderAction: HTItemToRecipeBuilder.ToItem.() -> Unit - ): HTItemToRecipeBuilder.ToItem { + builderAction: HTItemToItemRecipeBuilder.() -> Unit + ): HTItemToItemRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return HTItemToRecipeBuilder.ToItem(RagiumConstants.COMPRESSING, ::RTCompressingRecipe).apply(builderAction) + return HTSingleRecipeBuilder(RagiumConstants.COMPRESSING, ::RTCompressingRecipe).apply(builderAction) } @JvmStatic @@ -110,22 +112,22 @@ data object RagiumRecipeBuilders { @JvmStatic inline fun freezing( - builderAction: HTFluidToRecipeBuilder.ToItem.() -> Unit - ): HTFluidToRecipeBuilder.ToItem { + builderAction: HTFluidToItemRecipeBuilder.() -> Unit + ): HTFluidToItemRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return HTFluidToRecipeBuilder.ToItem(RagiumConstants.FREEZING, ::RTFreezingRecipe).apply(builderAction) + return HTSingleRecipeBuilder(RagiumConstants.FREEZING, ::RTFreezingRecipe).apply(builderAction) } @JvmStatic inline fun melting( - builderAction: HTItemToRecipeBuilder.ToFluid.() -> Unit - ): HTItemToRecipeBuilder.ToFluid { + builderAction: HTItemToFluidRecipeBuilder.() -> Unit + ): HTItemToFluidRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return HTItemToRecipeBuilder.ToFluid(RagiumConstants.MELTING, ::RTMeltingRecipe).apply(builderAction) + return HTSingleRecipeBuilder(RagiumConstants.MELTING, ::RTMeltingRecipe).apply(builderAction) } @JvmStatic @@ -229,11 +231,11 @@ data object RagiumRecipeBuilders { // Arcane @JvmStatic inline fun enchanting( - builderAction: HTItemToRecipeBuilder.ToItem.() -> Unit - ): HTItemToRecipeBuilder.ToItem { + builderAction: HTItemToItemRecipeBuilder.() -> Unit + ): HTItemToItemRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return HTItemToRecipeBuilder.ToItem(RagiumConstants.ENCHANTING, ::RTEnchantingRecipe).apply(builderAction) + return HTSingleRecipeBuilder(RagiumConstants.ENCHANTING, ::RTEnchantingRecipe).apply(builderAction) } } From 9191b9d622e27c8ca514d52462c77e9160c7386a Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 26 Sep 2026 18:17:49 +0900 Subject: [PATCH 09/14] =?UTF-8?q?refactor!:=20=E5=8C=96=E5=AD=A6=E7=89=A9?= =?UTF-8?q?=E8=B3=AA=E3=82=92=E5=A4=89=E6=9B=B4=20-=20Alumina=20->=20Alumi?= =?UTF-8?q?num=20Oxide?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/lang/RagiumEnglishLangProvider.kt | 21 +++++++++++++++-- .../data/lang/RagiumJapaneseLangProvider.kt | 23 ++++++++++++++++--- .../ragium/data/lang/RagiumLangProvider.kt | 4 ++++ .../resources/assets/ragium/lang/en_us.json | 16 +++++++++++++ .../resources/assets/ragium/lang/ja_jp.json | 18 ++++++++++++++- .../{alumina.json => aluminum_oxide.json} | 0 .../api/data/chemical/RagiumChemicals.kt | 4 ++-- .../ragium/api/material/RagiumMaterial.kt | 2 +- .../hiiragi283/ragium/common/RagiumCommon.kt | 2 +- 9 files changed, 80 insertions(+), 10 deletions(-) rename src/generated/resources/data/ragium/ragium/chemical/{alumina.json => aluminum_oxide.json} (100%) diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index f5adf30a9..3a3e59599 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -42,11 +42,9 @@ class RagiumEnglishLangProvider(output: PackOutput) : // 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") @@ -243,9 +241,28 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFromKey(RagiumChemicals.IRON, "Iron") addFromKey(RagiumChemicals.COPPER, "Copper") + addFromKey(RagiumChemicals.GOLD, "Gold") addFromKey(RagiumChemicals.HYDROXIDE, "Hydroxide") addFromKey(RagiumChemicals.WATER, "Water") + + addFromKey(RagiumChemicals.NITRATE, "Nitrate") + addFromKey(RagiumChemicals.NITRIC_ACID, "Nitric Acid") + addFromKey(RagiumChemicals.HYDROGEN_FLUORIDE, "Hydrogen Fluoride") + addFromKey(RagiumChemicals.FLUORITE, "Fluorite") + addFromKey(RagiumChemicals.CRYOLITE, "Cryolite") + + addFromKey(RagiumChemicals.SODIUM_HYDROXIDE, "Sodium Hydroxide") + addFromKey(RagiumChemicals.SODIUM_CHLORIDE, "Sodium Chloride") + addFromKey(RagiumChemicals.ALUMINUM_OXIDE, "Aluminum Oxide") + addFromKey(RagiumChemicals.SILICON_DIOXIDE, "Silicon Dioxide") + addFromKey(RagiumChemicals.SULFUR_DIOXIDE, "Sulfur Dioxide") + addFromKey(RagiumChemicals.SULFUR_TRIOXIDE, "Sulfur Trioxide") + addFromKey(RagiumChemicals.SULFATE, "Sulfate") + addFromKey(RagiumChemicals.SULFURIC_ACID, "Sulfuric Acid") + addFromKey(RagiumChemicals.HYDROGEN_CHLORIDE, "Hydrogen chloride") + + addFromKey(RagiumChemicals.POTASSIUM_NITRATE, "Potassium Nitrate") // Element addFromKey(RagiumElements.HYDROGEN, "Hydrogen") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 21d1bb610..b598b4a3e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -38,11 +38,9 @@ class RagiumJapaneseLangProvider(output: PackOutput) : // 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, "氷晶石の階段") @@ -239,9 +237,28 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFromKey(RagiumChemicals.IRON, "鉄") addFromKey(RagiumChemicals.COPPER, "銅") + addFromKey(RagiumChemicals.GOLD, "金") - addFromKey(RagiumChemicals.HYDROXIDE, "水酸基") + addFromKey(RagiumChemicals.HYDROXIDE, "水酸化物") addFromKey(RagiumChemicals.WATER, "水") + + addFromKey(RagiumChemicals.NITRATE, "硝酸塩") + addFromKey(RagiumChemicals.NITRIC_ACID, "硝酸") + addFromKey(RagiumChemicals.HYDROGEN_FLUORIDE, "フッ化水素") + addFromKey(RagiumChemicals.FLUORITE, "蛍石") + addFromKey(RagiumChemicals.CRYOLITE, "氷晶石") + + addFromKey(RagiumChemicals.SODIUM_HYDROXIDE, "水酸化ナトリウム") + addFromKey(RagiumChemicals.SODIUM_CHLORIDE, "塩化ナトリウム") + addFromKey(RagiumChemicals.ALUMINUM_OXIDE, "酸化アルミニウム") + addFromKey(RagiumChemicals.SILICON_DIOXIDE, "二酸化ケイ素") + addFromKey(RagiumChemicals.SULFUR_DIOXIDE, "二酸化硫黄") + addFromKey(RagiumChemicals.SULFUR_TRIOXIDE, "三酸化硫黄") + addFromKey(RagiumChemicals.SULFATE, "硫酸塩") + addFromKey(RagiumChemicals.SULFURIC_ACID, "硫酸") + addFromKey(RagiumChemicals.HYDROGEN_CHLORIDE, "塩化水素") + + addFromKey(RagiumChemicals.POTASSIUM_NITRATE, "硝酸カリウム") // Element addFromKey(RagiumElements.HYDROGEN, "水素") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt index a4cdde5d3..58ad033ce 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt @@ -11,6 +11,7 @@ import hiiragi283.lib.text.HTCommonTranslation import hiiragi283.lib.text.HTHasTranslationKey import hiiragi283.ragium.api.material.HTBlockPart import hiiragi283.ragium.api.material.HTItemPart +import hiiragi283.ragium.api.material.HTStorageBlockPart import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids @@ -26,6 +27,9 @@ interface RagiumLangProvider { .forEach { (part: HTBlockPart, material: RagiumMaterial, block: HTHasTranslationKey) -> provider.add(block, part, material) } + provider.add(RagiumBlocks.FLUORITE_BLOCK, HTStorageBlockPart.DEFAULT, RagiumMaterial.Gem.FLUORITE) + provider.add(RagiumBlocks.CRYOLITE_BLOCK, HTStorageBlockPart.DEFAULT, RagiumMaterial.Gem.CRYOLITE) + val casingPattern = HTLangPatternProvider("Machine Casing (%s)", "機械筐体 (%s)") for ((machineType: HTLangName, casing: HTHasTranslationKey) in RagiumBlocks.MACHINE_CASINGS) { provider.add(casing, casingPattern, machineType) diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 11e986b12..644c1c852 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -319,17 +319,33 @@ "item.ragium.wood_tar_bucket": "Wood Tar Bucket", "item.ragium.yellow_dye_bucket": "Yellow Dye Bucket", "ragium.chemical.ragium.aluminum": "Aluminum", + "ragium.chemical.ragium.aluminum_oxide": "Aluminum Oxide", "ragium.chemical.ragium.carbon": "Carbon", "ragium.chemical.ragium.chlorine": "Chlorine", "ragium.chemical.ragium.copper": "Copper", + "ragium.chemical.ragium.cryolite": "Cryolite", "ragium.chemical.ragium.diamond": "Diamond", + "ragium.chemical.ragium.fluorite": "Fluorite", + "ragium.chemical.ragium.gold": "Gold", "ragium.chemical.ragium.hydrogen": "Hydrogen", + "ragium.chemical.ragium.hydrogen_chloride": "Hydrogen chloride", + "ragium.chemical.ragium.hydrogen_fluoride": "Hydrogen Fluoride", "ragium.chemical.ragium.hydroxide": "Hydroxide", "ragium.chemical.ragium.iron": "Iron", + "ragium.chemical.ragium.nitrate": "Nitrate", + "ragium.chemical.ragium.nitric_acid": "Nitric Acid", "ragium.chemical.ragium.nitrogen": "Nitrogen", "ragium.chemical.ragium.oxygen": "Oxygen", + "ragium.chemical.ragium.potassium_nitrate": "Potassium Nitrate", "ragium.chemical.ragium.silicon": "Silicon", + "ragium.chemical.ragium.silicon_dioxide": "Silicon Dioxide", + "ragium.chemical.ragium.sodium_chloride": "Sodium Chloride", + "ragium.chemical.ragium.sodium_hydroxide": "Sodium Hydroxide", + "ragium.chemical.ragium.sulfate": "Sulfate", "ragium.chemical.ragium.sulfur": "Sulfur", + "ragium.chemical.ragium.sulfur_dioxide": "Sulfur Dioxide", + "ragium.chemical.ragium.sulfur_trioxide": "Sulfur Trioxide", + "ragium.chemical.ragium.sulfuric_acid": "Sulfuric Acid", "ragium.chemical.ragium.water": "Water", "ragium.element.ragium.aluminum": "Aluminum", "ragium.element.ragium.calcium": "Calcium", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 31781885e..a605808d4 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -319,17 +319,33 @@ "item.ragium.wood_tar_bucket": "木タール入りバケツ", "item.ragium.yellow_dye_bucket": "黄色の染料入りバケツ", "ragium.chemical.ragium.aluminum": "アルミニウム", + "ragium.chemical.ragium.aluminum_oxide": "酸化アルミニウム", "ragium.chemical.ragium.carbon": "炭素", "ragium.chemical.ragium.chlorine": "塩素", "ragium.chemical.ragium.copper": "銅", + "ragium.chemical.ragium.cryolite": "氷晶石", "ragium.chemical.ragium.diamond": "ダイヤモンド", + "ragium.chemical.ragium.fluorite": "蛍石", + "ragium.chemical.ragium.gold": "金", "ragium.chemical.ragium.hydrogen": "水素", - "ragium.chemical.ragium.hydroxide": "水酸基", + "ragium.chemical.ragium.hydrogen_chloride": "塩化水素", + "ragium.chemical.ragium.hydrogen_fluoride": "フッ化水素", + "ragium.chemical.ragium.hydroxide": "水酸化物", "ragium.chemical.ragium.iron": "鉄", + "ragium.chemical.ragium.nitrate": "硝酸塩", + "ragium.chemical.ragium.nitric_acid": "硝酸", "ragium.chemical.ragium.nitrogen": "窒素", "ragium.chemical.ragium.oxygen": "酸素", + "ragium.chemical.ragium.potassium_nitrate": "硝酸カリウム", "ragium.chemical.ragium.silicon": "ケイ素", + "ragium.chemical.ragium.silicon_dioxide": "二酸化ケイ素", + "ragium.chemical.ragium.sodium_chloride": "塩化ナトリウム", + "ragium.chemical.ragium.sodium_hydroxide": "水酸化ナトリウム", + "ragium.chemical.ragium.sulfate": "硫酸塩", "ragium.chemical.ragium.sulfur": "硫黄", + "ragium.chemical.ragium.sulfur_dioxide": "二酸化硫黄", + "ragium.chemical.ragium.sulfur_trioxide": "三酸化硫黄", + "ragium.chemical.ragium.sulfuric_acid": "硫酸", "ragium.chemical.ragium.water": "水", "ragium.element.ragium.aluminum": "アルミニウム", "ragium.element.ragium.calcium": "カルシウム", diff --git a/src/generated/resources/data/ragium/ragium/chemical/alumina.json b/src/generated/resources/data/ragium/ragium/chemical/aluminum_oxide.json similarity index 100% rename from src/generated/resources/data/ragium/ragium/chemical/alumina.json rename to src/generated/resources/data/ragium/ragium/chemical/aluminum_oxide.json diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt index 183e4862f..21e300de1 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt @@ -91,7 +91,7 @@ data object RagiumChemicals { val SODIUM_CHLORIDE: ResourceKey = create("sodium_chloride") @JvmField - val ALUMINA: ResourceKey = create("alumina") + val ALUMINUM_OXIDE: ResourceKey = create("aluminum_oxide") @JvmField val SILICON_DIOXIDE: ResourceKey = create("silicon_dioxide") @@ -210,7 +210,7 @@ data object RagiumChemicals { } ) context.register( - ALUMINA, + ALUMINUM_OXIDE, HTCompoundChemical.build(context) { add(RagiumElements.ALUMINUM, 2) add(RagiumElements.OXYGEN, 3) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index 877d5d09a..22bb335d6 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -188,7 +188,7 @@ sealed interface RagiumMaterial : /** * @since 26.1.7 */ - ALUMINA("Alumina", "アルミナ", RagiumChemicals.ALUMINA), + ALUMINA("Alumina", "アルミナ", RagiumChemicals.ALUMINUM_OXIDE), /** * @since 26.1.7 diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index 122d1c04a..53d56d8e4 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -107,7 +107,7 @@ internal data object RagiumCommon { setChemical(RagiumFluids.SALT_WATER, RagiumChemicals.SODIUM_CHLORIDE) setChemical(RagiumFluids.NAOH_SOLUTION, RagiumChemicals.SODIUM_HYDROXIDE) - setChemical(RagiumFluids.ALUMINA_SOLUTION, RagiumChemicals.ALUMINA) + setChemical(RagiumFluids.ALUMINA_SOLUTION, RagiumChemicals.ALUMINUM_OXIDE) setChemical(RagiumFluids.SULFUR_DIOXIDE, RagiumChemicals.SULFUR_DIOXIDE) setChemical(RagiumFluids.SULFUR_TRIOXIDE, RagiumChemicals.SULFUR_TRIOXIDE) setChemical(RagiumFluids.SULFURIC_ACID, RagiumChemicals.SULFURIC_ACID) From b34427b9e04165d56ea24252cc323946bfc66e74 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 26 Sep 2026 20:57:22 +0900 Subject: [PATCH 10/14] =?UTF-8?q?feat:=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-=20Alclad=20Plate=20-=20Carbon=20Fiber=20-=20CFRP=20Plate?= =?UTF-8?q?=20feat!:=20=E3=82=A2=E3=82=A4=E3=83=86=E3=83=A0=20Circuit=20Bo?= =?UTF-8?q?ard=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 | 5 +- .../data/lang/RagiumJapaneseLangProvider.kt | 5 +- .../data/recipe/RagiumCommonRecipeProvider.kt | 51 +++++++++++++----- .../recipe/RagiumVanillaRecipeProvider.kt | 34 +++++++----- .../{circuit_board.json => alclad_plate.json} | 2 +- .../assets/ragium/items/carbon_fiber.json | 6 +++ .../assets/ragium/items/cfrp_plate.json | 6 +++ .../assets/ragium/items/nitrogen_bucket.json | 13 +++++ .../resources/assets/ragium/lang/en_us.json | 8 ++- .../resources/assets/ragium/lang/ja_jp.json | 8 ++- .../{circuit_board.json => alclad_plate.json} | 2 +- .../ragium/models/item/carbon_fiber.json | 6 +++ .../assets/ragium/models/item/cfrp_plate.json | 6 +++ .../resources/data/c/tags/fluid/gaseous.json | 1 + .../resources/data/c/tags/fluid/nitrogen.json | 5 ++ .../resources/data/c/tags/item/buckets.json | 1 + .../data/c/tags/item/buckets/nitrogen.json | 5 ++ .../ragium/recipe/alloying/circuit_board.json | 22 -------- .../recipe/assembling/alclad_plate.json | 16 ++++++ .../recipe/assembling/electric_circuit.json | 18 ++++--- .../assembling/electronics_machine_parts.json | 18 ++++--- ...ctronics_machine_parts_by_black_metal.json | 2 +- .../ragium/recipe/bathing/cfrp_plate.json | 16 ++++++ .../ragium/recipe/shaped/electrolyzer.json | 2 +- .../data/ragium/recipe/shaped/enchanter.json | 2 +- .../recipe/shaped/precision_assembler.json | 2 +- .../hiiragi283/ragium/common/RagiumCommon.kt | 1 + .../ragium/common/fluid/RagiumFluids.kt | 3 ++ .../ragium/common/item/RagiumItems.kt | 12 +++-- .../ragium/textures/item/alclad_plate.png | Bin 0 -> 303 bytes .../ragium/textures/item/carbon_fiber.png | Bin 0 -> 301 bytes .../ragium/textures/item/cfrp_plate.png | Bin 0 -> 275 bytes 33 files changed, 209 insertions(+), 73 deletions(-) rename src/generated/resources/assets/ragium/items/{circuit_board.json => alclad_plate.json} (55%) create mode 100644 src/generated/resources/assets/ragium/items/carbon_fiber.json create mode 100644 src/generated/resources/assets/ragium/items/cfrp_plate.json create mode 100644 src/generated/resources/assets/ragium/items/nitrogen_bucket.json rename src/generated/resources/assets/ragium/models/item/{circuit_board.json => alclad_plate.json} (60%) create mode 100644 src/generated/resources/assets/ragium/models/item/carbon_fiber.json create mode 100644 src/generated/resources/assets/ragium/models/item/cfrp_plate.json create mode 100644 src/generated/resources/data/c/tags/fluid/nitrogen.json create mode 100644 src/generated/resources/data/c/tags/item/buckets/nitrogen.json delete mode 100644 src/generated/resources/data/ragium/recipe/alloying/circuit_board.json create mode 100644 src/generated/resources/data/ragium/recipe/assembling/alclad_plate.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/cfrp_plate.json create mode 100644 src/main/resources/assets/ragium/textures/item/alclad_plate.png create mode 100644 src/main/resources/assets/ragium/textures/item/carbon_fiber.png create mode 100644 src/main/resources/assets/ragium/textures/item/cfrp_plate.png diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index da2f581f7..28c10722f 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -126,6 +126,10 @@ data object RagiumClient : HTClientMod() { transparent() colorTint(Color(0x003399)) } + register.register(RagiumFluids.NITROGEN) { + transparent() + colorTint(Color(0x009999)) + } register.register(RagiumFluids.OXYGEN) { transparent() colorTint(Color(0x3399cc)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 3a3e59599..f755d8344 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.MOLTEN_ENDER, "Resonant Ender") addFluid(RagiumFluids.HYDROGEN, "Hydrogen") + addFluid(RagiumFluids.NITROGEN, "Nitrogen") addFluid(RagiumFluids.OXYGEN, "Oxygen") addFluid(RagiumFluids.CHLORINE, "Chlorine") @@ -130,6 +131,9 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumItems.PLASTIC_PLATE, "Plastic Plate") add(RagiumItems.SYNTHETIC_FEATHER, "Synthetic Feather") add(RagiumItems.SYNTHETIC_FIBER, "Synthetic Fiber") + add(RagiumItems.CARBON_FIBER, "Carbon Fiber") + add(RagiumItems.CFRP_PLATE, "CFRP Plate") + add(RagiumItems.ALCLAD_PLATE, "Alclad Plate") add(RagiumItems.SYNTHETIC_LEATHER, "Synthetic Leather") add(RagiumItems.BEESWAX, "Beeswax") add(RagiumItems.SPLASH_BOTTLE, "Splash Bottle") @@ -137,7 +141,6 @@ class RagiumEnglishLangProvider(output: PackOutput) : 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") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index b598b4a3e..8f685db6c 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.MOLTEN_ENDER, "共振エンダー") addFluid(RagiumFluids.HYDROGEN, "水素") + addFluid(RagiumFluids.NITROGEN, "窒素") addFluid(RagiumFluids.OXYGEN, "酸素") addFluid(RagiumFluids.CHLORINE, "塩素") @@ -126,6 +127,9 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumItems.PLASTIC_PLATE, "プラスチック板") add(RagiumItems.SYNTHETIC_FEATHER, "合成羽") add(RagiumItems.SYNTHETIC_FIBER, "合成繊維") + add(RagiumItems.CARBON_FIBER, "炭素繊維") + add(RagiumItems.CFRP_PLATE, "炭素繊維強化プラスチック板") + add(RagiumItems.ALCLAD_PLATE, "アルクラッド板") add(RagiumItems.SYNTHETIC_LEATHER, "合成牛皮") add(RagiumItems.BEESWAX, "密猟") add(RagiumItems.SPLASH_BOTTLE, "スプラッシュ瓶") @@ -133,7 +137,6 @@ class RagiumJapaneseLangProvider(output: PackOutput) : 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, "ウィザー人形") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index 080d88945..12016610b 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -182,6 +182,17 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu count = 2 } }.save(exporter) + // Synthetic Fiber + Nitrogen -> Carbon Fiber + // Carbon Fiber + Resin -> CFRP Plate + RagiumRecipeBuilders.bathing { + itemIngredient { items { +RagiumItems.CARBON_FIBER } } + fluidIngredient { + +holderSet(RagiumTags.Fluids.RESINS) + amount /= 4 + } + result { +RagiumItems.CFRP_PLATE } + }.save(exporter) + // Naphtha + Redstone -> Anti-rust Oil RagiumRecipeBuilders.mixing { itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.REDSTONE) } @@ -512,6 +523,18 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu } recipeId suffix "_with_cryolite" }.save(exporter) + // Al + Cu -> Alclad Plate + RagiumRecipeBuilders.assembling { + ingredient { + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.ALUMINUM) + count = 3 + } + extra { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.COPPER) } + result { + +RagiumItems.ALCLAD_PLATE + count = 4 + } + }.save(exporter) } // Electronics // @@ -592,26 +615,24 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu } }.save(exporter) - // Plastic + Gold Dust -> Circuit Board - RagiumRecipeBuilders.alloying { - ingredient { +holderSet(HTCommonTags.Items.PLASTICS) } - extra { +dustOrIngot(RagiumMaterial.Metal.GOLD) } - result { +RagiumItems.CIRCUIT_BOARD } - }.save(exporter) - // Circuit Chip + Circuit Board -> Electric Circuit + // Plastic + Circuit Chip + Gold Nugget -> Electric Circuit RagiumRecipeBuilders.assembling { - ingredient { + ingredient { +holderSet(HTCommonTags.Items.PLASTICS) } + extra { items { +RagiumItems.CIRCUIT_CHIP } count = 2 } - extra { items { +RagiumItems.CIRCUIT_BOARD } } + extra { + +holderSet(CommonTagPrefixes.NUGGET, RagiumMaterial.Metal.GOLD) + count = 3 + } result { +RagiumItems.ELECTRIC_CIRCUIT } }.save(exporter) // Machine Parts RagiumRecipeBuilders.assembling { ingredient { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) - count = 4 + count = 2 } extra { items { +RagiumItems.ELECTRIC_CIRCUIT } } result { +RagiumItems.getParts(HTMachineType.ELECTRONICS) } @@ -619,10 +640,16 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) RagiumRecipeBuilders.assembling { ingredient { - +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.VOID_METAL) + items { +RagiumItems.CFRP_PLATE } + } + extra { + items { +RagiumItems.CIRCUIT_CHIP } count = 2 } - extra { items { +RagiumItems.ELECTRIC_CIRCUIT } } + extra { + +holderSet(CommonTagPrefixes.NUGGET, RagiumMaterial.Metal.GOLD) + count = 3 + } result { +RagiumItems.getParts(HTMachineType.ELECTRONICS) } }.save(exporter) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 82031f74f..77489128d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -379,23 +379,29 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut } private inline fun electronics(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { - machine( - HTMachineType.ELECTRONICS, - RagiumMaterial.Metal.VOID_METAL, - RagiumMaterial.Gem.DIAMOND, - result, - builderAction - ) + VanillaRecipeBuilders.shaped { + +"ABA" + +"BCB" + +"ADA" + define('A') { items { +RagiumItems.ALCLAD_PLATE } } + define('B') { items { +RagiumItems.getParts(HTMachineType.ELECTRONICS) } } + define('C') { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Gem.DIAMOND) } + define('D', builderAction) + result { +result } + }.save(exporter) } private inline fun arcane(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { - machine( - HTMachineType.ARCANE, - RagiumMaterial.Metal.VOID_METAL, - RagiumMaterial.Metal.NETHERITE, - result, - builderAction - ) + VanillaRecipeBuilders.shaped { + +"ABA" + +"BCB" + +"ADA" + define('A') { items { +Items.GHAST_TEAR } } + define('B') { items { +RagiumItems.getParts(HTMachineType.ARCANE) } } + define('C') { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Metal.NETHERITE) } + define('D', builderAction) + result { +result } + }.save(exporter) } // Machine // diff --git a/src/generated/resources/assets/ragium/items/circuit_board.json b/src/generated/resources/assets/ragium/items/alclad_plate.json similarity index 55% rename from src/generated/resources/assets/ragium/items/circuit_board.json rename to src/generated/resources/assets/ragium/items/alclad_plate.json index 8ee04d370..ed5d15f99 100644 --- a/src/generated/resources/assets/ragium/items/circuit_board.json +++ b/src/generated/resources/assets/ragium/items/alclad_plate.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "ragium:item/circuit_board" + "model": "ragium:item/alclad_plate" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/carbon_fiber.json b/src/generated/resources/assets/ragium/items/carbon_fiber.json new file mode 100644 index 000000000..24627ae3c --- /dev/null +++ b/src/generated/resources/assets/ragium/items/carbon_fiber.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/carbon_fiber" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/cfrp_plate.json b/src/generated/resources/assets/ragium/items/cfrp_plate.json new file mode 100644 index 000000000..681433787 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/cfrp_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/cfrp_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/nitrogen_bucket.json b/src/generated/resources/assets/ragium/items/nitrogen_bucket.json new file mode 100644 index 000000000..edcd279f2 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/nitrogen_bucket.json @@ -0,0 +1,13 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "flip_gas": true, + "fluid": "ragium:nitrogen", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid", + "particle": "minecraft:item/bucket" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 644c1c852..771729b9e 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -87,6 +87,7 @@ "block.ragium.nether_sulfur_ore": "Nether Sulfur Ore", "block.ragium.niter_ore": "Niter Ore", "block.ragium.nitric_acid": "Nitric Acid", + "block.ragium.nitrogen": "Nitrogen", "block.ragium.ominous_flux": "Ominous Flux", "block.ragium.orange_dye": "Orange Dye", "block.ragium.ore_slurry": "Invalid Ore Slurry", @@ -187,6 +188,7 @@ "item.minecraft.tipped_arrow.effect.hunger": "Arrow of Hunger", "item.minecraft.tipped_arrow.effect.nausea": "Arrow of Nausea", "item.minecraft.tipped_arrow.effect.wither": "Arrow of Wither", + "item.ragium.alclad_plate": "Alclad Plate", "item.ragium.alumina_dust": "Alumina Dust", "item.ragium.alumina_solution_bucket": "Alumina Solution Bucket", "item.ragium.aluminum_ingot": "Aluminum Ingot", @@ -207,10 +209,11 @@ "item.ragium.borax_dust": "Borax Dust", "item.ragium.brown_dye_bucket": "Brown Dye Bucket", "item.ragium.carbon_dust": "Carbon Dust", + "item.ragium.carbon_fiber": "Carbon Fiber", + "item.ragium.cfrp_plate": "CFRP Plate", "item.ragium.charcoal_dust": "Charcoal Dust", "item.ragium.chemical_machine_parts": "Machine Parts (Chemical)", "item.ragium.chlorine_bucket": "Chlorine Bucket", - "item.ragium.circuit_board": "Circuit Board", "item.ragium.circuit_chip": "Circuit Chip", "item.ragium.coal_coke": "Coal Coke", "item.ragium.coal_dust": "Coal Dust", @@ -266,6 +269,7 @@ "item.ragium.netherite_nugget": "Netherite Nugget", "item.ragium.niter_dust": "Niter Dust", "item.ragium.nitric_acid_bucket": "Nitric Acid Bucket", + "item.ragium.nitrogen_bucket": "Nitrogen Bucket", "item.ragium.obsidian_dust": "Obsidian Dust", "item.ragium.ominous_flux_bucket": "Ominous Flux Bucket", "item.ragium.orange_dye_bucket": "Orange Dye Bucket", @@ -423,6 +427,7 @@ "tag.fluid.c.molten_redstone": "Destabilized Redstone", "tag.fluid.c.naphtha": "Naphtha", "tag.fluid.c.nitric_acid": "Nitric Acid", + "tag.fluid.c.nitrogen": "Nitrogen", "tag.fluid.c.ominous_flux": "Ominous Flux", "tag.fluid.c.oxygen": "Oxygen", "tag.fluid.c.resin": "Resin", @@ -470,6 +475,7 @@ "tag.item.c.buckets.molten_redstone": "Destabilized Redstone Bucket", "tag.item.c.buckets.naphtha": "Naphtha Bucket", "tag.item.c.buckets.nitric_acid": "Nitric Acid Bucket", + "tag.item.c.buckets.nitrogen": "Nitrogen Bucket", "tag.item.c.buckets.ominous_flux": "Ominous Flux Bucket", "tag.item.c.buckets.oxygen": "Oxygen Bucket", "tag.item.c.buckets.resin": "Resin Bucket", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index a605808d4..b135e0ea9 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -87,6 +87,7 @@ "block.ragium.nether_sulfur_ore": "ネザー硫黄鉱石", "block.ragium.niter_ore": "硝石鉱石", "block.ragium.nitric_acid": "硝酸", + "block.ragium.nitrogen": "窒素", "block.ragium.ominous_flux": "不吉な流動体", "block.ragium.orange_dye": "橙色の染料", "block.ragium.ore_slurry": "無効な鉱石泥", @@ -187,6 +188,7 @@ "item.minecraft.tipped_arrow.effect.hunger": "空腹の矢", "item.minecraft.tipped_arrow.effect.nausea": "吐き気の矢", "item.minecraft.tipped_arrow.effect.wither": "衰退の矢", + "item.ragium.alclad_plate": "アルクラッド板", "item.ragium.alumina_dust": "アルミナの粉", "item.ragium.alumina_solution_bucket": "アルミナ水溶液入りバケツ", "item.ragium.aluminum_ingot": "アルミニウムインゴット", @@ -207,10 +209,11 @@ "item.ragium.borax_dust": "ホウ砂の粉", "item.ragium.brown_dye_bucket": "茶色の染料入りバケツ", "item.ragium.carbon_dust": "炭素の粉", + "item.ragium.carbon_fiber": "炭素繊維", + "item.ragium.cfrp_plate": "炭素繊維強化プラスチック板", "item.ragium.charcoal_dust": "木炭の粉", "item.ragium.chemical_machine_parts": "機械部品 (化学)", "item.ragium.chlorine_bucket": "塩素入りバケツ", - "item.ragium.circuit_board": "回路基板", "item.ragium.circuit_chip": "回路チップ", "item.ragium.coal_coke": "石炭コークス", "item.ragium.coal_dust": "石炭の粉", @@ -266,6 +269,7 @@ "item.ragium.netherite_nugget": "ネザライトナゲット", "item.ragium.niter_dust": "硝石の粉", "item.ragium.nitric_acid_bucket": "硝酸入りバケツ", + "item.ragium.nitrogen_bucket": "窒素入りバケツ", "item.ragium.obsidian_dust": "黒曜石の粉", "item.ragium.ominous_flux_bucket": "不吉な流動体入りバケツ", "item.ragium.orange_dye_bucket": "橙色の染料入りバケツ", @@ -423,6 +427,7 @@ "tag.fluid.c.molten_redstone": "励起レッドストーン", "tag.fluid.c.naphtha": "ナフサ", "tag.fluid.c.nitric_acid": "硝酸", + "tag.fluid.c.nitrogen": "窒素", "tag.fluid.c.ominous_flux": "不吉な流動体", "tag.fluid.c.oxygen": "酸素", "tag.fluid.c.resin": "樹脂", @@ -470,6 +475,7 @@ "tag.item.c.buckets.molten_redstone": "励起レッドストーン入りバケツ", "tag.item.c.buckets.naphtha": "ナフサ入りバケツ", "tag.item.c.buckets.nitric_acid": "硝酸入りバケツ", + "tag.item.c.buckets.nitrogen": "窒素入りバケツ", "tag.item.c.buckets.ominous_flux": "不吉な流動体入りバケツ", "tag.item.c.buckets.oxygen": "酸素入りバケツ", "tag.item.c.buckets.resin": "樹脂入りバケツ", diff --git a/src/generated/resources/assets/ragium/models/item/circuit_board.json b/src/generated/resources/assets/ragium/models/item/alclad_plate.json similarity index 60% rename from src/generated/resources/assets/ragium/models/item/circuit_board.json rename to src/generated/resources/assets/ragium/models/item/alclad_plate.json index 7ab696f84..1bfef98d0 100644 --- a/src/generated/resources/assets/ragium/models/item/circuit_board.json +++ b/src/generated/resources/assets/ragium/models/item/alclad_plate.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "ragium:item/circuit_board" + "layer0": "ragium:item/alclad_plate" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/carbon_fiber.json b/src/generated/resources/assets/ragium/models/item/carbon_fiber.json new file mode 100644 index 000000000..3e544adc1 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/carbon_fiber.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/carbon_fiber" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/cfrp_plate.json b/src/generated/resources/assets/ragium/models/item/cfrp_plate.json new file mode 100644 index 000000000..bd333972c --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/cfrp_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/cfrp_plate" + } +} \ 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 1f94bcb1d..6ce4deb51 100644 --- a/src/generated/resources/data/c/tags/fluid/gaseous.json +++ b/src/generated/resources/data/c/tags/fluid/gaseous.json @@ -4,6 +4,7 @@ "#c:hydrogen", "#c:hydrogen_chloride", "#c:hydrogen_fluoride", + "#c:nitrogen", "#c:oxygen", "#c:sulfur_dioxide", "#c:sulfur_trioxide" diff --git a/src/generated/resources/data/c/tags/fluid/nitrogen.json b/src/generated/resources/data/c/tags/fluid/nitrogen.json new file mode 100644 index 000000000..15f7aadae --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/nitrogen.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:nitrogen" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets.json b/src/generated/resources/data/c/tags/item/buckets.json index 8356214c7..735e4cb61 100644 --- a/src/generated/resources/data/c/tags/item/buckets.json +++ b/src/generated/resources/data/c/tags/item/buckets.json @@ -37,6 +37,7 @@ "#c:buckets/molten_redstone", "#c:buckets/naphtha", "#c:buckets/nitric_acid", + "#c:buckets/nitrogen", "#c:buckets/ominous_flux", "#c:buckets/ore_slurry", "#c:buckets/oxygen", diff --git a/src/generated/resources/data/c/tags/item/buckets/nitrogen.json b/src/generated/resources/data/c/tags/item/buckets/nitrogen.json new file mode 100644 index 000000000..c44e29e2e --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/nitrogen.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:nitrogen_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json b/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json deleted file mode 100644 index 6b98f7f56..000000000 --- a/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:alloying", - "extra": { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/gold", - "c:ingots/gold" - ] - } - }, - "ingredient": { - "count": 1, - "items": "#c:plastics" - }, - "result": { - "count": 1, - "id": "ragium:circuit_board" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/alclad_plate.json b/src/generated/resources/data/ragium/recipe/assembling/alclad_plate.json new file mode 100644 index 000000000..65fbd5a46 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/alclad_plate.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:assembling", + "extra": { + "count": 1, + "items": "#c:ingots/copper" + }, + "ingredient": { + "count": 3, + "items": "#c:ingots/aluminum" + }, + "result": { + "count": 4, + "id": "ragium:alclad_plate" + }, + "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 aa1faac67..8789c0a1b 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json +++ b/src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json @@ -1,12 +1,18 @@ { "type": "ragium:assembling", - "extra": { - "count": 1, - "items": "ragium:circuit_board" - }, + "extras": [ + { + "count": 2, + "items": "ragium:circuit_chip" + }, + { + "count": 3, + "items": "#c:nuggets/gold" + } + ], "ingredient": { - "count": 2, - "items": "ragium:circuit_chip" + "count": 1, + "items": "#c:plastics" }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json index 73392ae26..caf56f428 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json +++ b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json @@ -1,12 +1,18 @@ { "type": "ragium:assembling", - "extra": { - "count": 1, - "items": "ragium:electric_circuit" - }, + "extras": [ + { + "count": 2, + "items": "ragium:circuit_chip" + }, + { + "count": 3, + "items": "#c:nuggets/gold" + } + ], "ingredient": { - "count": 2, - "items": "#c:ingots/void_metal" + "count": 1, + "items": "ragium:cfrp_plate" }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts_by_black_metal.json b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts_by_black_metal.json index e7be79da0..b0c15b852 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts_by_black_metal.json +++ b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts_by_black_metal.json @@ -5,7 +5,7 @@ "items": "ragium:electric_circuit" }, "ingredient": { - "count": 4, + "count": 2, "items": "#c:ingots/black_steel" }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/cfrp_plate.json b/src/generated/resources/data/ragium/recipe/bathing/cfrp_plate.json new file mode 100644 index 000000000..0f1f140f3 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cfrp_plate.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#ragium:resins" + }, + "item_ingredient": { + "count": 1, + "items": "ragium:carbon_fiber" + }, + "result": { + "count": 1, + "id": "ragium:cfrp_plate" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json b/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json index ce949af4c..328d05aa3 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json +++ b/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json @@ -2,7 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": "#c:nuggets/void_metal", + "A": "ragium:alclad_plate", "B": "ragium:electronics_machine_parts", "C": "#c:gears/diamond", "D": "#minecraft:lightning_rods" diff --git a/src/generated/resources/data/ragium/recipe/shaped/enchanter.json b/src/generated/resources/data/ragium/recipe/shaped/enchanter.json index b1130e35a..53c0c62d9 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/enchanter.json +++ b/src/generated/resources/data/ragium/recipe/shaped/enchanter.json @@ -2,7 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": "#c:nuggets/void_metal", + "A": "minecraft:ghast_tear", "B": "ragium:arcane_machine_parts", "C": "#c:gears/netherite", "D": "minecraft:enchanting_table" diff --git a/src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json b/src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json index c7ebde1de..92293a8da 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json +++ b/src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json @@ -2,7 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": "#c:nuggets/void_metal", + "A": "ragium:alclad_plate", "B": "ragium:electronics_machine_parts", "C": "#c:gears/diamond", "D": "ragium:assembler" diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index 53d56d8e4..2315c110d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -98,6 +98,7 @@ internal data object RagiumCommon { setChemical(RagiumFluids.MOLTEN_GLASS, RagiumChemicals.SILICON_DIOXIDE) setChemical(RagiumFluids.HYDROGEN, RagiumChemicals.HYDROGEN) + setChemical(RagiumFluids.NITROGEN, RagiumChemicals.NITROGEN) setChemical(RagiumFluids.OXYGEN, RagiumChemicals.OXYGEN) setChemical(RagiumFluids.CHLORINE, RagiumChemicals.CHLORINE) diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt index a7abc7575..00576ad08 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt @@ -130,6 +130,9 @@ data object RagiumFluids { val HYDROGEN: HTFluidContent.Virtual = REGISTER.registerVirtual("hydrogen") { properties = gaseous() } // 3rd + @JvmField + val NITROGEN: HTFluidContent.Virtual = REGISTER.registerVirtual("nitrogen") { properties = gaseous() } + @JvmField val OXYGEN: HTFluidContent.Virtual = REGISTER.registerVirtual("oxygen") { properties = gaseous() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index ca456043a..4304834a6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -159,6 +159,15 @@ data object RagiumItems { @JvmField val SYNTHETIC_FIBER: HTSimpleDeferredItem = REGISTER.registerSimpleItem("synthetic_fiber") + @JvmField + val CARBON_FIBER: HTSimpleDeferredItem = REGISTER.registerSimpleItem("carbon_fiber") + + @JvmField + val CFRP_PLATE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("cfrp_plate") + + @JvmField + val ALCLAD_PLATE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("alclad_plate") + // Bio @JvmField val BEESWAX: HTSimpleDeferredItem = REGISTER.registerItem("beeswax", ::HoneycombItem) @@ -181,9 +190,6 @@ data object RagiumItems { @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") diff --git a/src/main/resources/assets/ragium/textures/item/alclad_plate.png b/src/main/resources/assets/ragium/textures/item/alclad_plate.png new file mode 100644 index 0000000000000000000000000000000000000000..af3e7500bcf157f047f65d62dc4212cca481f758 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Pdr^5Ln;`bOxVcB=qS+k{K}Ui zn+Ct7AuG3N?G?Y!?Pa3%zTx-+MWIe@kwyCpmIrd!{xqBEyQcK)RK1^@t#^N}Exy_G zjJF%i65BH7`11Wo)Nt!ODe^iVe?ICnl+W@#C7ds+6_gHckq?_?RSkvI7+MliDaHN%i^Y0Vq1B{dIrsSy^_NMWE&)dghqH(}$ xuIPFN?t=G4-1mUq{Quw8p{xSPU<3J=nZfTxzv3*dz(qh222WQ%mvv4FO#teLcTWHS literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/item/carbon_fiber.png b/src/main/resources/assets/ragium/textures/item/carbon_fiber.png new file mode 100644 index 0000000000000000000000000000000000000000..54692e0bf7150bf547fd47ef073f7038cdabd31d GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k33x*Ln;`TT-wOjY{0{EVT-Xb zw={SB!TJI{kgsm=F0t>#k?%jDr@sBre~FQ-)j9|SuW8` zxV>%5y4Tr}(>B|ivL5-e?)5w7tn6c7IJAQ6%nAaxno71b*vax0HJnrv$P{?E=#j&G zzw?&tM_d(6JAJyN*fzH>e{ w-ez!G)==EZ5A@{!|3^eCvw;jYkZ+k8LLT2!LU*vx3e~tzqU4 zc)e@dw%pcJwrwm7&cbO3}@H9F1cL&;!DeR|d-tADL@YW;-V+bOfu4!+)d-IeRX7w)8mg)*u0(k=U(Ijo;^6)_$-s&IPK3$<-W z6`MHhe=%HOxb%H*UXpa0@aKql1|G2mMdvj+Pq03^nR Date: Sat, 26 Sep 2026 21:16:58 +0900 Subject: [PATCH 11/14] =?UTF-8?q?refactor:=20RagiumMaterial.Alloy=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 --- .../advancement/RagiumAdvancementProvider.kt | 4 +- .../ragium/data/lang/RagiumLangProvider.kt | 2 +- .../data/recipe/RagiumCommonRecipeProvider.kt | 4 +- .../data/recipe/RagiumHeatRecipeProvider.kt | 12 ++-- .../recipe/RagiumMechanicalRecipeProvider.kt | 3 +- .../recipe/RagiumVanillaRecipeProvider.kt | 61 +++++++++++-------- .../ragium/data/tag/RagiumItemTagsProvider.kt | 2 +- .../ragium/api/material/RagiumMaterial.kt | 45 +++++++------- .../ragium/common/block/RagiumBlocks.kt | 10 +-- .../ragium/common/item/RagiumItems.kt | 17 +++--- 10 files changed, 87 insertions(+), 73 deletions(-) diff --git a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt index eb764034d..b040367e4 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt @@ -78,7 +78,7 @@ class RagiumAdvancementProvider(packOutput: PackOutput, future: CompletableFutur RagiumAdvancementKeys.SOOTY_IRON, RagiumAdvancementKeys.ROOT, HTItemPart.INGOT, - RagiumMaterial.Metal.SOOTY_IRON + RagiumMaterial.Alloy.SOOTY_IRON ) // Mechanical createSimple( @@ -113,7 +113,7 @@ class RagiumAdvancementProvider(packOutput: PackOutput, future: CompletableFutur RagiumAdvancementKeys.BLACK_STEEL, RagiumAdvancementKeys.ALLOY_SMELTER, HTItemPart.INGOT, - RagiumMaterial.Metal.BLACK_STEEL + RagiumMaterial.Alloy.BLACK_STEEL ) createSimple( RagiumAdvancementKeys.FREEZER, diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt index 58ad033ce..8c4c94c01 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt @@ -61,7 +61,7 @@ interface RagiumLangProvider { provider.add(parts, partsPattern, machineType) } for (toolType: HTToolType in HTToolType.entries) { - provider.add(RagiumItems.SOOTY_IRON_TOOLS[toolType], toolType, RagiumMaterial.Metal.SOOTY_IRON) + provider.add(RagiumItems.SOOTY_IRON_TOOLS[toolType], toolType, RagiumMaterial.Alloy.SOOTY_IRON) } // Text // API - Constants diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index 12016610b..cd9c55bbe 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -231,7 +231,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu +holderSet(RagiumFluids.COLORED_RESINS.black) amount /= 4 }*/ - result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.BLACK_STEEL) } + result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Alloy.BLACK_STEEL) } } } @@ -631,7 +631,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu // Machine Parts RagiumRecipeBuilders.assembling { ingredient { - +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.BLACK_STEEL) count = 2 } extra { items { +RagiumItems.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 c99252298..9bcf6753c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -66,7 +66,7 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture // Machine Casing RagiumRecipeBuilders.alloying { ingredient { - +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.BLACK_STEEL) count = 2 } extra { +dustOrIngot(RagiumMaterial.Metal.GOLD) } @@ -84,7 +84,7 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture ) ) } - result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) } recipeId suffix "_by_coals" }.save(exporter) // 2x Iron + Cokes -> 2x Sooty Iron @@ -95,19 +95,19 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture } extra { +holderSet(RagiumTags.Items.COKES) } result { - +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.SOOTY_IRON) + +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) count = 2 } recipeId suffix "_by_cokes" }.save(exporter) // Sooty Iron + Obsidian Dust -> Black Steel RagiumRecipeBuilders.alloying { - ingredient { +dustOrIngot(RagiumMaterial.Metal.SOOTY_IRON) } + ingredient { +dustOrIngot(RagiumMaterial.Alloy.SOOTY_IRON) } extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.OBSIDIAN) count = 2 } - result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.BLACK_STEEL) } + result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Alloy.BLACK_STEEL) } }.save(exporter) // Aluminum + Copper + Obsidian Dust -> Black Steel RagiumRecipeBuilders.alloying { @@ -118,7 +118,7 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture extra { +dustOrIngot(RagiumMaterial.Metal.COPPER) } extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.OBSIDIAN) } result { - +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.BLACK_STEEL) + +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Alloy.BLACK_STEEL) count = 4 } recipeId replace id("obzinite_ingot") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index a693b4dbb..49041a691 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -545,7 +545,7 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) } - for (metal: RagiumMaterial.Metal in RagiumMaterial.Metal.entries) { + for (metal: RagiumMaterial in RagiumMaterial.Metal.entries + RagiumMaterial.Alloy.entries) { val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, metal] ?: continue RagiumRecipeBuilders.crushing { ingredient { +holderSet(CommonTagPrefixes.INGOT, metal) } @@ -733,7 +733,6 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) // Raw XX -> XX Dust for (metal: RagiumMaterial.Metal in RagiumMaterial.Metal.entries) { - if (!metal.hasRawVariant) continue val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, metal] ?: continue RagiumRecipeBuilders.crushing { ingredient { diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 77489128d..0a8bf5224 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -234,7 +234,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut +"A A" +"ABA" +" A " - define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) } define('B') { +holderSet(Tags.Items.CHESTS_WOODEN) } result { +Items.HOPPER @@ -246,7 +246,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut +"A A" +"ABA" +" A " - define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) } + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.BLACK_STEEL) } define('B') { +holderSet(Tags.Items.CHESTS_WOODEN) } result { +Items.HOPPER @@ -262,7 +262,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut // Mechanical VanillaRecipeBuilders.shaped { layered2() - define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) } define('B') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.REDSTONE) } result { +RagiumItems.getParts(HTMachineType.MECHANICAL) @@ -303,8 +303,8 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut +"ABA" +"B B" +"ABA" - define('A') { +holderSet(CommonTagPrefixes.NUGGET, RagiumMaterial.Metal.SOOTY_IRON) } - define('B') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + define('A') { +holderSet(CommonTagPrefixes.NUGGET, RagiumMaterial.Alloy.SOOTY_IRON) } + define('B') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) } result { +RagiumBlocks.MACHINE_CASING count = 4 @@ -341,7 +341,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut private inline fun mechanical(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.MECHANICAL, - RagiumMaterial.Metal.SOOTY_IRON, + RagiumMaterial.Alloy.SOOTY_IRON, RagiumMaterial.Metal.COPPER, result, builderAction @@ -351,7 +351,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut private inline fun heat(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.HEAT, - RagiumMaterial.Metal.SOOTY_IRON, + RagiumMaterial.Alloy.SOOTY_IRON, RagiumMaterial.Metal.IRON, result, builderAction @@ -361,7 +361,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut private inline fun chemical(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.CHEMICAL, - RagiumMaterial.Metal.BLACK_STEEL, + RagiumMaterial.Alloy.BLACK_STEEL, RagiumMaterial.Metal.GOLD, result, builderAction @@ -371,7 +371,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut private inline fun bio(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.BIO, - RagiumMaterial.Metal.BLACK_STEEL, + RagiumMaterial.Alloy.BLACK_STEEL, RagiumMaterial.Gem.EMERALD, result, builderAction @@ -398,7 +398,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut +"ADA" define('A') { items { +Items.GHAST_TEAR } } define('B') { items { +RagiumItems.getParts(HTMachineType.ARCANE) } } - define('C') { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Metal.NETHERITE) } + define('C') { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Alloy.NETHERITE) } define('D', builderAction) result { +result } }.save(exporter) @@ -410,14 +410,14 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut // Tank VanillaRecipeBuilders.shaped { hollow8() - define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) } define('B') { +holderSet(Tags.Items.BUCKETS_EMPTY) } result { +RagiumBlocks.TANK } recipeId suffix "_by_sooty_iron" }.save(exporter) VanillaRecipeBuilders.shaped { hollow4() - define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) } + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.BLACK_STEEL) } define('B') { +holderSet(Tags.Items.BUCKETS_EMPTY) } result { +RagiumBlocks.TANK } recipeId suffix "_by_black_steel" @@ -425,7 +425,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut // Void Tank VanillaRecipeBuilders.shaped { hollow8() - define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.VOID_METAL) } + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.VOID_METAL) } define('B') { +holderSet(Tags.Items.BUCKETS_EMPTY) } result { +RagiumBlocks.VOID_TANK } }.save(exporter) @@ -446,15 +446,15 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut 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) + nineToBlock(RagiumMaterial.Alloy.SOOTY_IRON, HTItemPart.INGOT) + nineToBlock(RagiumMaterial.Alloy.BLACK_STEEL, HTItemPart.INGOT) + nineToBlock(RagiumMaterial.Alloy.VOID_METAL, HTItemPart.INGOT) // Ingot <-> Nugget - ingotToNugget(RagiumMaterial.Metal.NETHERITE, ingot = HTSimpleDeferredItem(vanillaId("netherite_ingot"))) ingotToNugget(RagiumMaterial.Metal.ALUMINUM) - ingotToNugget(RagiumMaterial.Metal.SOOTY_IRON) - ingotToNugget(RagiumMaterial.Metal.BLACK_STEEL) - ingotToNugget(RagiumMaterial.Metal.VOID_METAL) + ingotToNugget(RagiumMaterial.Alloy.NETHERITE, ingot = HTSimpleDeferredItem(vanillaId("netherite_ingot"))) + ingotToNugget(RagiumMaterial.Alloy.SOOTY_IRON) + ingotToNugget(RagiumMaterial.Alloy.BLACK_STEEL) + ingotToNugget(RagiumMaterial.Alloy.VOID_METAL) // Gear RagiumItems.getOrThrow(HTItemPart.GEAR, RagiumMaterial.Other.WOOD).let { gear: HTSimpleDeferredItem -> VanillaRecipeBuilders.shaped { @@ -469,11 +469,11 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut gear(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.COPPER) gear(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) gear(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.GOLD) - RagiumItems.MATERIAL_ITEMS[HTItemPart.GEAR, RagiumMaterial.Metal.NETHERITE]?.let { + RagiumItems.MATERIAL_ITEMS[HTItemPart.GEAR, RagiumMaterial.Alloy.NETHERITE]?.let { VanillaRecipeBuilders.smithing { template { items { +Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE } } base { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Gem.DIAMOND) } - addition { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.NETHERITE) } + addition { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.NETHERITE) } result { +it } }.save(exporter) } @@ -484,7 +484,6 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut RagiumMaterial.Metal.COPPER -> HTSimpleDeferredItem(vanillaId("copper_ingot")) RagiumMaterial.Metal.IRON -> HTSimpleDeferredItem(vanillaId("iron_ingot")) RagiumMaterial.Metal.GOLD -> HTSimpleDeferredItem(vanillaId("gold_ingot")) - RagiumMaterial.Metal.NETHERITE -> HTSimpleDeferredItem(vanillaId("netherite_ingot")) else -> RagiumItems.MATERIAL_ITEMS[HTItemPart.INGOT, metal] } ?: continue VanillaRecipeBuilders.smeltingAndBlasting(exporter) { @@ -495,6 +494,20 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut recipeId suffix "_from_dust" } } + for (alloy: RagiumMaterial.Alloy in RagiumMaterial.Alloy.entries) { + val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, alloy] ?: continue + val item: HTSimpleDeferredItem = when (alloy) { + RagiumMaterial.Alloy.NETHERITE -> HTSimpleDeferredItem(vanillaId("netherite_ingot")) + else -> RagiumItems.MATERIAL_ITEMS[HTItemPart.INGOT, alloy] + } ?: continue + VanillaRecipeBuilders.smeltingAndBlasting(exporter) { + ingredient { items { +dust } } + result { +item } + exp = 0.35f + group = item.id.path + recipeId suffix "_from_dust" + } + } // Fuel for (fuel: RagiumMaterial.Fuel in RagiumMaterial.Fuel.entries) { val base: HTSimpleDeferredItem = RagiumMaterialHelper.getFuelBase(fuel) @@ -521,7 +534,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut // Sooty Iron val ironIngot: HolderSet = holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) val sootyIronIngot: HTSimpleDeferredItem = - RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.SOOTY_IRON) + RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) VanillaRecipeBuilders.shaped { hollow8() define('A') { diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index 23f971ba4..bc14d6762 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -53,7 +53,7 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu } builder(RagiumTags.Items.SOOTY_IRON_TOOL_MATERIALS) - .addTag(CommonTagPrefixes.INGOT.itemTagKey(RagiumMaterial.Metal.SOOTY_IRON)) + .addTag(CommonTagPrefixes.INGOT.itemTagKey(RagiumMaterial.Alloy.SOOTY_IRON)) // Other builder(ItemTags.SLABS) .add(RagiumBlocks.FLUORITE_SLAB) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index 22bb335d6..87575c2ae 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -16,6 +16,7 @@ sealed interface RagiumMaterial : yieldAll(Mineral.entries) yieldAll(Gem.entries) yieldAll(Metal.entries) + yieldAll(Alloy.entries) yieldAll(Other.entries) } @@ -52,12 +53,8 @@ sealed interface RagiumMaterial : RagiumMaterial, HTLangName by langName { // Minecraft - REDSTONE("Redstone", "レッドストーン") { - override val isVanilla: Boolean = true - }, - GLOWSTONE("Glowstone", "グロウストーン") { - override val isVanilla: Boolean = true - }, + REDSTONE("Redstone", "レッドストーン"), + GLOWSTONE("Glowstone", "グロウストーン"), // Common SALT("Salt", "食塩", RagiumChemicals.SODIUM_CHLORIDE), @@ -79,7 +76,7 @@ sealed interface RagiumMaterial : chemicalKey ) - open val isVanilla: Boolean = false + val isVanilla: Boolean get() = this == REDSTONE || this == GLOWSTONE override val materialName: String = name.lowercase() } @@ -124,39 +121,45 @@ sealed interface RagiumMaterial : COPPER("Copper", "銅", RagiumChemicals.COPPER), IRON("Iron", "鉄", RagiumChemicals.IRON), GOLD("Gold", "金", RagiumChemicals.GOLD), - NETHERITE("Netherite", "ネザライト") { - override val hasRawVariant: Boolean = false - }, // Common /** * @since 26.1.7 */ - ALUMINUM("Aluminum", "アルミニウム", RagiumChemicals.ALUMINUM), + ALUMINUM("Aluminum", "アルミニウム", RagiumChemicals.ALUMINUM) + ; + + constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( + HTLangName(enName, jaName), + chemicalKey + ) + + override val materialName: String = name.lowercase() + } + + enum class Alloy(langName: HTLangName, override val chemicalKey: ResourceKey?) : + RagiumMaterial, + HTLangName by langName { + // Minecraft + NETHERITE("Netherite", "ネザライト"), // Ragium /** * @since 26.1.3 */ - SOOTY_IRON("Sooty Iron", "煤鉄") { - override val hasRawVariant: Boolean = false - }, + SOOTY_IRON("Sooty Iron", "煤鉄"), /** * @since 26.1.3 */ - BLACK_STEEL("Black Steel", "黒鋼") { - override val hasRawVariant: Boolean = false - }, + BLACK_STEEL("Black Steel", "黒鋼"), /** * @since 26.1.4 */ - VOID_METAL("Void Metal", "虚金") { - override val hasRawVariant: Boolean = false - } + VOID_METAL("Void Metal", "虚金") ; constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( @@ -164,8 +167,6 @@ sealed interface RagiumMaterial : chemicalKey ) - open val hasRawVariant: Boolean = true - override val materialName: String = name.lowercase() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 08307562f..e36e87622 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -155,9 +155,9 @@ data object RagiumBlocks { RagiumMaterial.Fuel.COAL_COKE to copyOf(Blocks.COAL_BLOCK).mapColor(MapColor.COLOR_GRAY), RagiumMaterial.Fuel.PITCH_COKE to copyOf(Blocks.COAL_BLOCK).mapColor(MapColor.COLOR_BLUE), RagiumMaterial.Metal.ALUMINUM to copyOf(Blocks.COPPER_BLOCK).mapColor(MapColor.COLOR_PINK), - RagiumMaterial.Metal.SOOTY_IRON to copyOf(Blocks.IRON_BLOCK).mapColor(MapColor.COLOR_GRAY), - RagiumMaterial.Metal.BLACK_STEEL to copyOf(Blocks.IRON_BLOCK).mapColor(MapColor.COLOR_BLACK), - RagiumMaterial.Metal.VOID_METAL to copyOf(Blocks.IRON_BLOCK).mapColor(MapColor.TERRACOTTA_BLUE) + RagiumMaterial.Alloy.SOOTY_IRON to copyOf(Blocks.IRON_BLOCK).mapColor(MapColor.COLOR_GRAY), + RagiumMaterial.Alloy.BLACK_STEEL to copyOf(Blocks.IRON_BLOCK).mapColor(MapColor.COLOR_BLACK), + RagiumMaterial.Alloy.VOID_METAL to copyOf(Blocks.IRON_BLOCK).mapColor(MapColor.TERRACOTTA_BLUE) ).associateTo( sortedMapOf(RagiumMaterial.COMPARATOR) ) { (material: RagiumMaterial, properties: BlockBehaviour.Properties) -> @@ -449,8 +449,8 @@ data object RagiumBlocks { private fun modifyDefaultComponents(event: ModifyDefaultComponentsEvent) { // Block setOf( - RagiumMaterial.Metal.BLACK_STEEL to Rarity.UNCOMMON, - RagiumMaterial.Metal.VOID_METAL to Rarity.RARE + RagiumMaterial.Alloy.BLACK_STEEL to Rarity.UNCOMMON, + RagiumMaterial.Alloy.VOID_METAL to Rarity.RARE ).forEach { (material: RagiumMaterial, rarity: Rarity) -> for (part: HTBlockPart in HTBlockPart.entries) { val block: ItemLike = MATERIAL_BLOCKS[part, material] ?: continue diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index 4304834a6..7b9253502 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -82,11 +82,12 @@ data object RagiumItems { putAll(RagiumMaterial.Metal.COPPER, HTItemPart.DUST, HTItemPart.GEAR) putAll(RagiumMaterial.Metal.IRON, HTItemPart.DUST, HTItemPart.GEAR) putAll(RagiumMaterial.Metal.GOLD, HTItemPart.DUST, HTItemPart.GEAR) - putAll(RagiumMaterial.Metal.NETHERITE, HTItemPart.DUST, HTItemPart.GEAR, HTItemPart.NUGGET) putAll(RagiumMaterial.Metal.ALUMINUM, HTItemPart.INGOT, HTItemPart.NUGGET) - putAll(RagiumMaterial.Metal.SOOTY_IRON, HTItemPart.INGOT, HTItemPart.NUGGET) - putAll(RagiumMaterial.Metal.BLACK_STEEL, HTItemPart.INGOT, HTItemPart.NUGGET) - putAll(RagiumMaterial.Metal.VOID_METAL, HTItemPart.INGOT, HTItemPart.NUGGET) + // Alloy + putAll(RagiumMaterial.Alloy.NETHERITE, HTItemPart.DUST, HTItemPart.GEAR, HTItemPart.NUGGET) + putAll(RagiumMaterial.Alloy.SOOTY_IRON, HTItemPart.INGOT, HTItemPart.NUGGET) + putAll(RagiumMaterial.Alloy.BLACK_STEEL, HTItemPart.INGOT, HTItemPart.NUGGET) + putAll(RagiumMaterial.Alloy.VOID_METAL, HTItemPart.INGOT, HTItemPart.NUGGET) // Other putAll(RagiumMaterial.Other.WOOD, HTItemPart.DUST, HTItemPart.GEAR) putAll(RagiumMaterial.Other.GLASS, HTItemPart.DUST) @@ -105,11 +106,11 @@ data object RagiumItems { REGISTER.registerSimpleItem(part.createName(material)) { properties: Item.Properties -> when (material) { RagiumMaterial.Mineral.RAGINITE -> Rarity.EPIC - RagiumMaterial.Metal.BLACK_STEEL -> Rarity.UNCOMMON - RagiumMaterial.Metal.VOID_METAL -> Rarity.RARE + RagiumMaterial.Alloy.BLACK_STEEL -> Rarity.UNCOMMON + RagiumMaterial.Alloy.VOID_METAL -> Rarity.RARE else -> null }?.let(properties::rarity) - if (material == RagiumMaterial.Metal.NETHERITE) { + if (material == RagiumMaterial.Alloy.NETHERITE) { properties.fireResistant() } material.chemicalKey?.let { @@ -233,7 +234,7 @@ data object RagiumItems { @JvmField val SOOTY_IRON_TOOLS: HTToolCollection = HTToolCollection { toolType: HTToolType -> REGISTER.registerItem( - toolType.createPath(RagiumMaterial.Metal.SOOTY_IRON), + toolType.createPath(RagiumMaterial.Alloy.SOOTY_IRON), { prop: Item.Properties -> toolType.createItem(prop, RagiumToolMaterials.SOOTY_IRON, 6f, -3.1f, -2f, -1f) } ) } From 3107f2922c53539ad8cdcdb73a8fd9cbf7eb15a9 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 27 Sep 2026 00:49:15 +0900 Subject: [PATCH 12/14] =?UTF-8?q?feat:=20=E3=82=A2=E3=83=AB=E3=82=AB?= =?UTF-8?q?=E3=83=AA=E5=B7=A5=E6=A5=AD=E3=81=AB=E9=96=A2=E3=81=99=E3=82=8B?= =?UTF-8?q?=E8=A6=81=E7=B4=A0=E3=82=92=E8=BF=BD=E5=8A=A0=20-=20Fluid=20=20?= =?UTF-8?q?=20-=20Carbon=20Dioxide=20=20=20-=20Calcium=20Hydroxide=20Solut?= =?UTF-8?q?ion=20-=20Item=20=20=20-=20Calcium=20Carbonate=20Dust=20=20=20-?= =?UTF-8?q?=20Calcium=20Oxide=20Dust=20=20=20-=20Cement=20=20=20-=20Mortar?= =?UTF-8?q?=20=20=20-=20Sodium=20Carbonate=20Dust?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/client/RagiumClient.kt | 8 ++ .../data/lang/RagiumEnglishLangProvider.kt | 6 +- .../data/lang/RagiumJapaneseLangProvider.kt | 6 +- .../recipe/RagiumChemicalRecipeProvider.kt | 42 +------ .../data/recipe/RagiumCommonRecipeProvider.kt | 109 +++++++++++++++--- .../data/recipe/RagiumHeatRecipeProvider.kt | 14 --- .../recipe/RagiumMechanicalRecipeProvider.kt | 16 ++- .../recipe/RagiumVanillaRecipeProvider.kt | 57 +++++---- .../calcium_hydroxide_solution.json | 7 ++ .../ragium/items/calcium_carbonate_dust.json | 6 + .../calcium_hydroxide_solution_bucket.json | 12 ++ .../ragium/items/calcium_oxide_dust.json | 6 + .../ragium/items/carbon_dioxide_bucket.json | 13 +++ .../resources/assets/ragium/items/cement.json | 6 + .../resources/assets/ragium/items/mortar.json | 6 + .../ragium/items/sodium_carbonate_dust.json | 6 + .../resources/assets/ragium/lang/en_us.json | 13 +++ .../resources/assets/ragium/lang/ja_jp.json | 13 +++ .../block/calcium_hydroxide_solution.json | 5 + .../models/item/calcium_carbonate_dust.json | 6 + .../models/item/calcium_oxide_dust.json | 6 + .../assets/ragium/models/item/cement.json | 6 + .../assets/ragium/models/item/mortar.json | 6 + .../models/item/sodium_carbonate_dust.json | 6 + .../fluid/calcium_hydroxide_solution.json | 6 + .../data/c/tags/fluid/carbon_dioxide.json | 5 + .../resources/data/c/tags/fluid/gaseous.json | 1 + .../resources/data/c/tags/item/buckets.json | 2 + .../buckets/calcium_hydroxide_solution.json | 5 + .../c/tags/item/buckets/carbon_dioxide.json | 5 + .../resources/data/c/tags/item/dusts.json | 3 + .../c/tags/item/dusts/calcium_carbonate.json | 5 + .../data/c/tags/item/dusts/calcium_oxide.json | 5 + .../c/tags/item/dusts/sodium_carbonate.json | 5 + .../data/ragium/recipe/alloying/glass.json | 16 +++ .../recipe/alloying/obzinite_ingot.json | 34 ------ ...{salt_dust_from_block.json => mortar.json} | 8 +- .../ragium/recipe/bathing/tinted_glass.json | 22 ---- .../recipe/blasting/calcium_oxide_dust.json | 10 ++ .../blasting/sodium_carbonate_dust.json | 10 ++ .../calcium_carbonate_dust_from_calcite.json | 12 ++ .../mixing/calcium_hydroxide_solution.json | 16 +++ .../recipe/pyrolyzing/calcium_oxide_dust.json | 16 +++ .../calcium_carbonate_dust_from_solution.json | 20 ++++ .../sodium_carbonate_dust_from_solution.json | 20 ++++ .../data/ragium/recipe/shaped/bricks.json | 15 +++ .../ragium/recipe/shaped/nether_bricks.json | 15 +++ .../data/ragium/recipe/shapeless/cement.json | 12 ++ .../data/ragium/recipe/shapeless/mortar.json | 15 +++ .../recipe/smelting/calcium_oxide_dust.json | 10 ++ .../smelting/sodium_carbonate_dust.json | 10 ++ .../ragium/api/material/RagiumMaterial.kt | 99 ++++++++++++---- .../ragium/common/fluid/RagiumFluids.kt | 10 +- .../ragium/common/item/RagiumItems.kt | 27 +++-- .../common/material/RagiumMaterialHelper.kt | 39 ++++++- .../textures/item/calcium_carbonate_dust.png | Bin 0 -> 267 bytes .../textures/item/calcium_oxide_dust.png | Bin 0 -> 267 bytes .../textures/item/sodium_carbonate_dust.png | Bin 0 -> 267 bytes 58 files changed, 665 insertions(+), 194 deletions(-) create mode 100644 src/generated/resources/assets/ragium/blockstates/calcium_hydroxide_solution.json create mode 100644 src/generated/resources/assets/ragium/items/calcium_carbonate_dust.json create mode 100644 src/generated/resources/assets/ragium/items/calcium_hydroxide_solution_bucket.json create mode 100644 src/generated/resources/assets/ragium/items/calcium_oxide_dust.json create mode 100644 src/generated/resources/assets/ragium/items/carbon_dioxide_bucket.json create mode 100644 src/generated/resources/assets/ragium/items/cement.json create mode 100644 src/generated/resources/assets/ragium/items/mortar.json create mode 100644 src/generated/resources/assets/ragium/items/sodium_carbonate_dust.json create mode 100644 src/generated/resources/assets/ragium/models/block/calcium_hydroxide_solution.json create mode 100644 src/generated/resources/assets/ragium/models/item/calcium_carbonate_dust.json create mode 100644 src/generated/resources/assets/ragium/models/item/calcium_oxide_dust.json create mode 100644 src/generated/resources/assets/ragium/models/item/cement.json create mode 100644 src/generated/resources/assets/ragium/models/item/mortar.json create mode 100644 src/generated/resources/assets/ragium/models/item/sodium_carbonate_dust.json create mode 100644 src/generated/resources/data/c/tags/fluid/calcium_hydroxide_solution.json create mode 100644 src/generated/resources/data/c/tags/fluid/carbon_dioxide.json create mode 100644 src/generated/resources/data/c/tags/item/buckets/calcium_hydroxide_solution.json create mode 100644 src/generated/resources/data/c/tags/item/buckets/carbon_dioxide.json create mode 100644 src/generated/resources/data/c/tags/item/dusts/calcium_carbonate.json create mode 100644 src/generated/resources/data/c/tags/item/dusts/calcium_oxide.json create mode 100644 src/generated/resources/data/c/tags/item/dusts/sodium_carbonate.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/glass.json delete mode 100644 src/generated/resources/data/ragium/recipe/alloying/obzinite_ingot.json rename src/generated/resources/data/ragium/recipe/bathing/{salt_dust_from_block.json => mortar.json} (59%) delete mode 100644 src/generated/resources/data/ragium/recipe/bathing/tinted_glass.json create mode 100644 src/generated/resources/data/ragium/recipe/blasting/calcium_oxide_dust.json create mode 100644 src/generated/resources/data/ragium/recipe/blasting/sodium_carbonate_dust.json create mode 100644 src/generated/resources/data/ragium/recipe/crushing/calcium_carbonate_dust_from_calcite.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/calcium_hydroxide_solution.json create mode 100644 src/generated/resources/data/ragium/recipe/pyrolyzing/calcium_oxide_dust.json create mode 100644 src/generated/resources/data/ragium/recipe/reacting/calcium_carbonate_dust_from_solution.json create mode 100644 src/generated/resources/data/ragium/recipe/reacting/sodium_carbonate_dust_from_solution.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/bricks.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/nether_bricks.json create mode 100644 src/generated/resources/data/ragium/recipe/shapeless/cement.json create mode 100644 src/generated/resources/data/ragium/recipe/shapeless/mortar.json create mode 100644 src/generated/resources/data/ragium/recipe/smelting/calcium_oxide_dust.json create mode 100644 src/generated/resources/data/ragium/recipe/smelting/sodium_carbonate_dust.json create mode 100644 src/main/resources/assets/ragium/textures/item/calcium_carbonate_dust.png create mode 100644 src/main/resources/assets/ragium/textures/item/calcium_oxide_dust.png create mode 100644 src/main/resources/assets/ragium/textures/item/sodium_carbonate_dust.png diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 28c10722f..133e229f2 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -139,6 +139,10 @@ data object RagiumClient : HTClientMod() { colorTint(Color(0x99cc33)) } + register.register(RagiumFluids.CARBON_DIOXIDE) { + transparent() + colorTint(Color(0x336699)) + } register.register(RagiumFluids.WOOD_TAR) { molten() colorTint(Color(0x663333)) @@ -224,6 +228,10 @@ data object RagiumClient : HTClientMod() { dull() colorTint(Color(0xccff99)) } + register.register(RagiumFluids.CAOH_SOLUTION) { + dull() + colorTint(Color(0x333399)) + } register.register(RagiumFluids.ORE_SLURRY) { still = Material(vanillaId(HTConstants.BLOCK, "white_concrete_powder")) diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index f755d8344..6ab1afde8 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -100,6 +100,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFluid(RagiumFluids.OXYGEN, "Oxygen") addFluid(RagiumFluids.CHLORINE, "Chlorine") + addFluid(RagiumFluids.CARBON_DIOXIDE, "Carbon Dioxide") addFluid(RagiumFluids.WOOD_TAR, "Wood Tar") addFluid(RagiumFluids.COAL_TAR, "Coal Tar") addFluid(RagiumFluids.AROMATIC_COMPOUND, "Aromatic Compound") @@ -121,13 +122,16 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROGEN_CHLORIDE, "Hydrogen Chloride") addFluid(RagiumFluids.HYDROCHLORIC_ACID, "Hydrochloric Acid") addFluid(RagiumFluids.BLEACH, "Bleach") + addFluid(RagiumFluids.CAOH_SOLUTION, "Calcium Hydroxide Solution") add(RagiumFluids.ORE_SLURRY.getFluidType().descriptionId, "Invalid Ore Slurry") add(RagiumFluids.ORE_SLURRY.bucketHolder, $$"%1$s Bucket") // Item add(RagiumItems.BAMBOO_CHARCOAL, "Bamboo Charcoal") - add(RagiumItems.TAR, "Tar") add(RagiumItems.PARTICLE_BOARD, "Particle Board") + add(RagiumItems.CEMENT, "Cement") + add(RagiumItems.MORTAR, "Mortar") + add(RagiumItems.TAR, "Tar") add(RagiumItems.PLASTIC_PLATE, "Plastic Plate") add(RagiumItems.SYNTHETIC_FEATHER, "Synthetic Feather") add(RagiumItems.SYNTHETIC_FIBER, "Synthetic Fiber") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 8f685db6c..f101ab3c6 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -96,6 +96,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFluid(RagiumFluids.OXYGEN, "酸素") addFluid(RagiumFluids.CHLORINE, "塩素") + addFluid(RagiumFluids.CARBON_DIOXIDE, "二酸化炭素") addFluid(RagiumFluids.WOOD_TAR, "木タール") addFluid(RagiumFluids.COAL_TAR, "石炭タール") addFluid(RagiumFluids.AROMATIC_COMPOUND, "芳香族化合物") @@ -117,13 +118,16 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROGEN_CHLORIDE, "塩化水素") addFluid(RagiumFluids.HYDROCHLORIC_ACID, "塩酸") addFluid(RagiumFluids.BLEACH, "漂白剤") + addFluid(RagiumFluids.CAOH_SOLUTION, "水酸化カルシウム水溶液") add(RagiumFluids.ORE_SLURRY.getFluidType().descriptionId, "無効な鉱石泥") add(RagiumFluids.ORE_SLURRY.bucketHolder, $$"%1$s入りバケツ") // Item add(RagiumItems.BAMBOO_CHARCOAL, "竹炭") - add(RagiumItems.TAR, "タール") add(RagiumItems.PARTICLE_BOARD, "パーティクルボード") + add(RagiumItems.CEMENT, "セメント") + add(RagiumItems.MORTAR, "モルタル") + add(RagiumItems.TAR, "タール") add(RagiumItems.PLASTIC_PLATE, "プラスチック板") add(RagiumItems.SYNTHETIC_FEATHER, "合成羽") add(RagiumItems.SYNTHETIC_FIBER, "合成繊維") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt index 45eb78b79..74df04d61 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt @@ -1,59 +1,25 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.data.recipe.HTRecipeProvider -import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders -import hiiragi283.ragium.api.material.HTItemPart -import hiiragi283.ragium.api.material.RagiumMaterial -import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.item.RagiumItems import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput -import net.minecraft.world.item.Items import java.util.concurrent.CompletableFuture class RagiumChemicalRecipeProvider(packOutput: PackOutput, future: CompletableFuture) : HTRecipeProvider(packOutput, future, RagiumAPI.MOD_ID) { override fun exportValues() { - bathing() - centrifuging() - } - - private fun bathing() { - // Wood Pulp + NaOH aq -> Paper Pulp - RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.WOOD) } - fluidIngredient { - +holderSet(RagiumFluids.NAOH_SOLUTION) - amount = 250 - } - result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.PAPER) } - recipeId suffix "_from_wood" - }.save(exporter) - // Paper Pulp + Water -> Paper + // Cement + Water -> Mortar RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.PAPER) } + itemIngredient { items { +RagiumItems.CEMENT } } fluidIngredient { +waterSet() - amount = 250 + amount /= 4 } - result { +Items.PAPER } - recipeId suffix "_from_pulp" + result { +RagiumItems.MORTAR } }.save(exporter) - - // Molten Glass + Amethyst -> Tinted Glass - RagiumRecipeBuilders.bathing { - itemIngredient { +dustOrGem(RagiumMaterial.Gem.AMETHYST) } - fluidIngredient { +holderSet(RagiumFluids.MOLTEN_GLASS) } - result { - +Items.TINTED_GLASS - count = 2 - } - }.save(exporter) - } - - private fun centrifuging() { } override fun getName(): String = "Chemical Recipes" diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index cd9c55bbe..9407bf533 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -3,10 +3,12 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.collection.nelOf import hiiragi283.lib.color.VanillaColoredCollections import hiiragi283.lib.data.recipe.HTRecipeProvider +import hiiragi283.lib.data.recipe.builder.VanillaRecipeBuilders import hiiragi283.lib.data.recipe.builder.ingredient import hiiragi283.lib.data.recipe.builder.result import hiiragi283.lib.recipe.ingredient.HTMaterialTagsIngredient import hiiragi283.lib.registry.HTFluidContent +import hiiragi283.lib.registry.HTSimpleDeferredItem import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.lib.tag.HTCommonTags import hiiragi283.ragium.api.RagiumAPI @@ -90,7 +92,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) RagiumRecipeBuilders.pyrolyzing { ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Fuel.COAL) } - itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.CARBON) } + itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.CARBON) } fluidResult { +RagiumFluids.COAL_TAR amount = 500 @@ -240,6 +242,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu private fun chemical() { colored() + alkali() chlorine() sulfuricAcid() nitricAcid() @@ -297,7 +300,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // Carbon + Resin -> Black Dye RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.CARBON) } + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.CARBON) } fluidIngredient { +holderSet(RagiumTags.Fluids.RESINS) amount /= 4 @@ -307,17 +310,95 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) } - private fun chlorine() { - // Dried Kelp + Water -> Salt - RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(Tags.Items.STORAGE_BLOCKS_DRIED_KELP) } - fluidIngredient { +waterSet() } + private fun alkali() { + // Dried Kelp -> Na2CO3 + VanillaRecipeBuilders.smeltingAndBlasting(exporter) { + ingredient { items { +Items.DRIED_KELP } } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.SODIUM_CARBONATE) } + exp = 0.15f + } + // 2x NaOH (aq) + CO2 -> Na2CO3 + H2O + RagiumRecipeBuilders.reacting { + primaryIngredient { +holderSet(RagiumFluids.NAOH_SOLUTION) } + secondaryIngredient { +holderSet(RagiumFluids.CARBON_DIOXIDE) } + fluidResult { + +Fluids.WATER + amount *= 2 + } + val dust: HTSimpleDeferredItem = + RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.SODIUM_CARBONATE) + itemResult { +dust } + recipeId replace dust.idOrThrow + recipeId suffix "_from_solution" + }.save(exporter) + // SiO2 + Na2CO3 -> Glass + RagiumRecipeBuilders.alloying { + ingredient { + +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Gem.QUARTZ) + count = 2 + } + extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.SODIUM_CARBONATE) } result { - +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.SALT) + +Items.GLASS count = 6 } - recipeId suffix "_from_block" }.save(exporter) + + // CaCO3 -> CaO + CO2 + VanillaRecipeBuilders.smeltingAndBlasting(exporter) { + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.CALCIUM_CARBONATE) } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.CALCIUM_OXIDE) } + exp = 0.15f + } + RagiumRecipeBuilders.pyrolyzing { + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.CALCIUM_CARBONATE) } + itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.CALCIUM_OXIDE) } + fluidResult { +RagiumFluids.CARBON_DIOXIDE } + }.save(exporter) + // CaO + H2O -> Ca(OH)2 (aq) + RagiumRecipeBuilders.mixing { + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.CALCIUM_OXIDE) } + fluidIngredient { +waterSet() } + result { +RagiumFluids.CAOH_SOLUTION } + }.save(exporter) + // Ca(OH)2 (aq) + CO2 -> CaCO3 + H2O + RagiumRecipeBuilders.reacting { + primaryIngredient { +holderSet(RagiumFluids.CAOH_SOLUTION) } + secondaryIngredient { +holderSet(RagiumFluids.CARBON_DIOXIDE) } + fluidResult { + +Fluids.WATER + amount *= 2 + } + val dust: HTSimpleDeferredItem = + RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.CALCIUM_CARBONATE) + itemResult { +dust } + recipeId replace dust.idOrThrow + recipeId suffix "_from_solution" + }.save(exporter) + + // Wood Pulp + NaOH aq -> Paper Pulp + RagiumRecipeBuilders.bathing { + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.WOOD) } + fluidIngredient { + +holderSet(RagiumFluids.NAOH_SOLUTION) + amount = 250 + } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.PAPER) } + recipeId suffix "_from_wood" + }.save(exporter) + // Paper Pulp + Water -> Paper + RagiumRecipeBuilders.bathing { + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.PAPER) } + fluidIngredient { + +waterSet() + amount = 250 + } + result { +Items.PAPER } + recipeId suffix "_from_pulp" + }.save(exporter) + } + + private fun chlorine() { // NaCl(aq) -> H2O + NaCl RagiumRecipeBuilders.refining { ingredient { +holderSet(RagiumFluids.SALT_WATER) } @@ -490,7 +571,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu // Alumina Solution -> Al2O3 + Water RagiumRecipeBuilders.refining { ingredient { +holderSet(RagiumFluids.ALUMINA_SOLUTION) } - itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.ALUMINA) } + itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.ALUMINA) } fluidResult { +Fluids.WATER } recipeId replace id("alumina_dust_from_solution") }.save(exporter) @@ -505,7 +586,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // Al2O3 + Cokes + Na3AlF6 -> Al RagiumRecipeBuilders.alloying { - ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.ALUMINA) } + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.ALUMINA) } extra { +holderSet(RagiumTags.Items.COKES) } result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.ALUMINUM) @@ -514,7 +595,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu time *= 4 }.save(exporter) RagiumRecipeBuilders.alloying { - ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.ALUMINA) } + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.ALUMINA) } extra { +holderSet(RagiumTags.Items.COKES) } extra { +dustOrGem(RagiumMaterial.Gem.CRYOLITE) } result { @@ -595,12 +676,12 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu +holderSet(RagiumFluids.HYDROCHLORIC_ACID) amount = 125 } - result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.SILICON) } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.SILICON) } }.save(exporter) // Si Dust + Redstone -> Silicon Wafer RagiumRecipeBuilders.alloying { ingredient { - +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.SILICON) + +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.SILICON) count = 8 } extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.RAGINITE) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 9bcf6753c..d67f648fb 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -109,20 +109,6 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture } result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Alloy.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.Alloy.BLACK_STEEL) - count = 4 - } - recipeId replace id("obzinite_ingot") - }.save(exporter) } private fun freezing() { diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index 49041a691..7419a5019 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -379,7 +379,7 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable // XX Dust -> XX for (fuel: RagiumMaterial.Fuel in RagiumMaterial.Fuel.entries) { - val baseItem: HTSimpleDeferredItem = RagiumMaterialHelper.getFuelBase(fuel) + val baseItem: HTSimpleDeferredItem = RagiumMaterialHelper.getBase(fuel) RagiumRecipeBuilders.compressing { ingredient { +holderSet(CommonTagPrefixes.DUST, fuel) } result { +baseItem } @@ -533,7 +533,7 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) RagiumRecipeBuilders.crushing { ingredient { +holderSet(RagiumTags.Items.COKES) } - result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.CARBON) } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.CARBON) } }.save(exporter) for (gem: RagiumMaterial.Gem in RagiumMaterial.Gem.entries) { @@ -545,10 +545,10 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) } - for (metal: RagiumMaterial in RagiumMaterial.Metal.entries + RagiumMaterial.Alloy.entries) { - val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, metal] ?: continue + for (metalLike: RagiumMaterial.MetalLike in RagiumMaterial.MetalLike.entries) { + val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, metalLike] ?: continue RagiumRecipeBuilders.crushing { - ingredient { +holderSet(CommonTagPrefixes.INGOT, metal) } + ingredient { +holderSet(CommonTagPrefixes.INGOT, metalLike) } result { +dust } recipeId suffix "_from_ingot" }.save(exporter) @@ -666,6 +666,12 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable recipeId suffix "_from_ore" }.save(exporter) + RagiumRecipeBuilders.crushing { + ingredient { items { +Items.CALCITE } } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.CALCIUM_CARBONATE) } + recipeId suffix "_from_calcite" + }.save(exporter) + RagiumRecipeBuilders.crushing { ingredient { +holderSet(CommonTagPrefixes.ORE, RagiumMaterial.Gem.LAPIS) } result { diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 0a8bf5224..93534f945 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -90,6 +90,36 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut count = 4 } }.save(exporter) + // Cement + VanillaRecipeBuilders.shapeless { + ingredient { +holderSet(Tags.Items.SANDS) } + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.CALCIUM_OXIDE) } + result { + +RagiumItems.CEMENT + count = 2 + } + }.save(exporter) + // Mortar + VanillaRecipeBuilders.shapeless { + ingredient { +holderSet(Tags.Items.BUCKETS_WATER) } + repeat(4) { ingredient { items { +RagiumItems.CEMENT } } } + result { + +RagiumItems.MORTAR + count = 4 + } + }.save(exporter) + VanillaRecipeBuilders.shaped { + mosaic4() + define('A') { +holderSet(Tags.Items.BRICKS_NORMAL) } + define('B') { items { +RagiumItems.MORTAR } } + result { +Items.BRICKS } + }.save(exporter) + VanillaRecipeBuilders.shaped { + mosaic4() + define('A') { +holderSet(Tags.Items.BRICKS_NETHER) } + define('B') { items { +RagiumItems.MORTAR } } + result { +Items.NETHER_BRICKS } + }.save(exporter) // XX Tools registerTools(RagiumItems.SOOTY_IRON_TOOLS, RagiumToolMaterials.SOOTY_IRON) @@ -478,28 +508,9 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut }.save(exporter) } // Dust -> Ingot - for (metal: RagiumMaterial.Metal in RagiumMaterial.Metal.entries) { - val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, metal] ?: continue - val item: HTSimpleDeferredItem = when (metal) { - RagiumMaterial.Metal.COPPER -> HTSimpleDeferredItem(vanillaId("copper_ingot")) - RagiumMaterial.Metal.IRON -> HTSimpleDeferredItem(vanillaId("iron_ingot")) - RagiumMaterial.Metal.GOLD -> HTSimpleDeferredItem(vanillaId("gold_ingot")) - else -> RagiumItems.MATERIAL_ITEMS[HTItemPart.INGOT, metal] - } ?: continue - VanillaRecipeBuilders.smeltingAndBlasting(exporter) { - ingredient { items { +dust } } - result { +item } - exp = 0.35f - group = item.id.path - recipeId suffix "_from_dust" - } - } - for (alloy: RagiumMaterial.Alloy in RagiumMaterial.Alloy.entries) { - val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, alloy] ?: continue - val item: HTSimpleDeferredItem = when (alloy) { - RagiumMaterial.Alloy.NETHERITE -> HTSimpleDeferredItem(vanillaId("netherite_ingot")) - else -> RagiumItems.MATERIAL_ITEMS[HTItemPart.INGOT, alloy] - } ?: continue + for (metalLike: RagiumMaterial.MetalLike in RagiumMaterial.MetalLike.entries) { + val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, metalLike] ?: continue + val item: HTSimpleDeferredItem = RagiumMaterialHelper.getIngot(metalLike) VanillaRecipeBuilders.smeltingAndBlasting(exporter) { ingredient { items { +dust } } result { +item } @@ -510,7 +521,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut } // Fuel for (fuel: RagiumMaterial.Fuel in RagiumMaterial.Fuel.entries) { - val base: HTSimpleDeferredItem = RagiumMaterialHelper.getFuelBase(fuel) + val base: HTSimpleDeferredItem = RagiumMaterialHelper.getBase(fuel) // Storage nineToBlock(fuel, Ingredient.of(base), base) // Tiny diff --git a/src/generated/resources/assets/ragium/blockstates/calcium_hydroxide_solution.json b/src/generated/resources/assets/ragium/blockstates/calcium_hydroxide_solution.json new file mode 100644 index 000000000..c1d3e117a --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/calcium_hydroxide_solution.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/calcium_hydroxide_solution" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/calcium_carbonate_dust.json b/src/generated/resources/assets/ragium/items/calcium_carbonate_dust.json new file mode 100644 index 000000000..46c0e2bba --- /dev/null +++ b/src/generated/resources/assets/ragium/items/calcium_carbonate_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/calcium_carbonate_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/calcium_hydroxide_solution_bucket.json b/src/generated/resources/assets/ragium/items/calcium_hydroxide_solution_bucket.json new file mode 100644 index 000000000..61a3cb335 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/calcium_hydroxide_solution_bucket.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "fluid": "ragium:calcium_hydroxide_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/calcium_oxide_dust.json b/src/generated/resources/assets/ragium/items/calcium_oxide_dust.json new file mode 100644 index 000000000..19e4e3c6a --- /dev/null +++ b/src/generated/resources/assets/ragium/items/calcium_oxide_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/calcium_oxide_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/carbon_dioxide_bucket.json b/src/generated/resources/assets/ragium/items/carbon_dioxide_bucket.json new file mode 100644 index 000000000..a7eb3a34b --- /dev/null +++ b/src/generated/resources/assets/ragium/items/carbon_dioxide_bucket.json @@ -0,0 +1,13 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "flip_gas": true, + "fluid": "ragium:carbon_dioxide", + "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/cement.json b/src/generated/resources/assets/ragium/items/cement.json new file mode 100644 index 000000000..53fa74ebe --- /dev/null +++ b/src/generated/resources/assets/ragium/items/cement.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/cement" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/mortar.json b/src/generated/resources/assets/ragium/items/mortar.json new file mode 100644 index 000000000..8cc764b4f --- /dev/null +++ b/src/generated/resources/assets/ragium/items/mortar.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/mortar" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/sodium_carbonate_dust.json b/src/generated/resources/assets/ragium/items/sodium_carbonate_dust.json new file mode 100644 index 000000000..b3eba9dda --- /dev/null +++ b/src/generated/resources/assets/ragium/items/sodium_carbonate_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/sodium_carbonate_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 771729b9e..7e32ebe48 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -31,6 +31,8 @@ "block.ragium.blue_dye": "Blue Dye", "block.ragium.brewery": "Brewery", "block.ragium.brown_dye": "Brown Dye", + "block.ragium.calcium_hydroxide_solution": "Calcium Hydroxide Solution", + "block.ragium.carbon_dioxide": "Carbon Dioxide", "block.ragium.charcoal_block": "Block of Charcoal", "block.ragium.chemical_bath": "Chemical Bath", "block.ragium.chemical_machine_casing": "Machine Casing (Chemical)", @@ -208,8 +210,13 @@ "item.ragium.blue_dye_bucket": "Blue Dye Bucket", "item.ragium.borax_dust": "Borax Dust", "item.ragium.brown_dye_bucket": "Brown Dye Bucket", + "item.ragium.calcium_carbonate_dust": "Calcium Carbonate Dust", + "item.ragium.calcium_hydroxide_solution_bucket": "Calcium Hydroxide Solution Bucket", + "item.ragium.calcium_oxide_dust": "Calcium Oxide Dust", + "item.ragium.carbon_dioxide_bucket": "Carbon Dioxide Bucket", "item.ragium.carbon_dust": "Carbon Dust", "item.ragium.carbon_fiber": "Carbon Fiber", + "item.ragium.cement": "Cement", "item.ragium.cfrp_plate": "CFRP Plate", "item.ragium.charcoal_dust": "Charcoal Dust", "item.ragium.chemical_machine_parts": "Machine Parts (Chemical)", @@ -263,6 +270,7 @@ "item.ragium.molten_glass_bucket": "Molten Glass Bucket", "item.ragium.molten_glowstone_bucket": "Energized Glowstone Bucket", "item.ragium.molten_redstone_bucket": "Destabilized Redstone Bucket", + "item.ragium.mortar": "Mortar", "item.ragium.naphtha_bucket": "Naphtha Bucket", "item.ragium.netherite_dust": "Netherite Dust", "item.ragium.netherite_gear": "Netherite Gear", @@ -291,6 +299,7 @@ "item.ragium.salt_water_bucket": "Salt Water Bucket", "item.ragium.silicon_dust": "Silicon Dust", "item.ragium.silicon_wafer": "Silicon Wafer", + "item.ragium.sodium_carbonate_dust": "Sodium Carbonate Dust", "item.ragium.sodium_hydroxide_solution_bucket": "Sodium Hydroxide Solution Bucket", "item.ragium.sooty_iron_axe": "Sooty Iron Axe", "item.ragium.sooty_iron_hoe": "Sooty Iron Hoe", @@ -394,6 +403,8 @@ "tag.fluid.c.anti_rust_oil": "Anti-rust Oil", "tag.fluid.c.aromatic_compound": "Aromatic Compound", "tag.fluid.c.bleach": "Bleach", + "tag.fluid.c.calcium_hydroxide_solution": "Calcium Hydroxide Solution", + "tag.fluid.c.carbon_dioxide": "Carbon Dioxide", "tag.fluid.c.chlorine": "Chlorine", "tag.fluid.c.coal_tar": "Coal Tar", "tag.fluid.c.crude_oil": "Crude Oil", @@ -442,6 +453,8 @@ "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.calcium_hydroxide_solution": "Calcium Hydroxide Solution Bucket", + "tag.item.c.buckets.carbon_dioxide": "Carbon Dioxide 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", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index b135e0ea9..b4e0a8c17 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -31,6 +31,8 @@ "block.ragium.blue_dye": "青色の染料", "block.ragium.brewery": "醸造機", "block.ragium.brown_dye": "茶色の染料", + "block.ragium.calcium_hydroxide_solution": "水酸化カルシウム水溶液", + "block.ragium.carbon_dioxide": "二酸化炭素", "block.ragium.charcoal_block": "木炭ブロック", "block.ragium.chemical_bath": "化学浴槽", "block.ragium.chemical_machine_casing": "機械筐体 (化学)", @@ -208,8 +210,13 @@ "item.ragium.blue_dye_bucket": "青色の染料入りバケツ", "item.ragium.borax_dust": "ホウ砂の粉", "item.ragium.brown_dye_bucket": "茶色の染料入りバケツ", + "item.ragium.calcium_carbonate_dust": "炭酸カルシウムの粉", + "item.ragium.calcium_hydroxide_solution_bucket": "水酸化カルシウム水溶液入りバケツ", + "item.ragium.calcium_oxide_dust": "酸化カルシウムの粉", + "item.ragium.carbon_dioxide_bucket": "二酸化炭素入りバケツ", "item.ragium.carbon_dust": "炭素の粉", "item.ragium.carbon_fiber": "炭素繊維", + "item.ragium.cement": "セメント", "item.ragium.cfrp_plate": "炭素繊維強化プラスチック板", "item.ragium.charcoal_dust": "木炭の粉", "item.ragium.chemical_machine_parts": "機械部品 (化学)", @@ -263,6 +270,7 @@ "item.ragium.molten_glass_bucket": "溶融ガラス入りバケツ", "item.ragium.molten_glowstone_bucket": "活性グロウストーン入りバケツ", "item.ragium.molten_redstone_bucket": "励起レッドストーン入りバケツ", + "item.ragium.mortar": "モルタル", "item.ragium.naphtha_bucket": "ナフサ入りバケツ", "item.ragium.netherite_dust": "ネザライトの粉", "item.ragium.netherite_gear": "ネザライトの歯車", @@ -291,6 +299,7 @@ "item.ragium.salt_water_bucket": "塩水入りバケツ", "item.ragium.silicon_dust": "シリコンの粉", "item.ragium.silicon_wafer": "シリコンウェハ", + "item.ragium.sodium_carbonate_dust": "炭酸ナトリウムの粉", "item.ragium.sodium_hydroxide_solution_bucket": "水酸化ナトリウム水溶液入りバケツ", "item.ragium.sooty_iron_axe": "煤鉄の斧", "item.ragium.sooty_iron_hoe": "煤鉄のクワ", @@ -394,6 +403,8 @@ "tag.fluid.c.anti_rust_oil": "防錆油", "tag.fluid.c.aromatic_compound": "芳香族化合物", "tag.fluid.c.bleach": "漂白剤", + "tag.fluid.c.calcium_hydroxide_solution": "水酸化カルシウム水溶液", + "tag.fluid.c.carbon_dioxide": "二酸化炭素", "tag.fluid.c.chlorine": "塩素", "tag.fluid.c.coal_tar": "石炭タール", "tag.fluid.c.crude_oil": "原油", @@ -442,6 +453,8 @@ "tag.item.c.buckets.anti_rust_oil": "防錆油入りバケツ", "tag.item.c.buckets.aromatic_compound": "芳香族化合物入りバケツ", "tag.item.c.buckets.bleach": "漂白剤入りバケツ", + "tag.item.c.buckets.calcium_hydroxide_solution": "水酸化カルシウム水溶液入りバケツ", + "tag.item.c.buckets.carbon_dioxide": "二酸化炭素入りバケツ", "tag.item.c.buckets.chlorine": "塩素入りバケツ", "tag.item.c.buckets.coal_tar": "石炭タール入りバケツ", "tag.item.c.buckets.crude_oil": "原油入りバケツ", diff --git a/src/generated/resources/assets/ragium/models/block/calcium_hydroxide_solution.json b/src/generated/resources/assets/ragium/models/block/calcium_hydroxide_solution.json new file mode 100644 index 000000000..67032282f --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/calcium_hydroxide_solution.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/calcium_carbonate_dust.json b/src/generated/resources/assets/ragium/models/item/calcium_carbonate_dust.json new file mode 100644 index 000000000..1354ddc0e --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/calcium_carbonate_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/calcium_carbonate_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/calcium_oxide_dust.json b/src/generated/resources/assets/ragium/models/item/calcium_oxide_dust.json new file mode 100644 index 000000000..4b827ffa6 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/calcium_oxide_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/calcium_oxide_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/cement.json b/src/generated/resources/assets/ragium/models/item/cement.json new file mode 100644 index 000000000..8562dfd76 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/cement.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/cement" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/mortar.json b/src/generated/resources/assets/ragium/models/item/mortar.json new file mode 100644 index 000000000..992190553 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/mortar.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/mortar" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/sodium_carbonate_dust.json b/src/generated/resources/assets/ragium/models/item/sodium_carbonate_dust.json new file mode 100644 index 000000000..f1e838bbe --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/sodium_carbonate_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/sodium_carbonate_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/calcium_hydroxide_solution.json b/src/generated/resources/data/c/tags/fluid/calcium_hydroxide_solution.json new file mode 100644 index 000000000..f40a727e7 --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/calcium_hydroxide_solution.json @@ -0,0 +1,6 @@ +{ + "values": [ + "ragium:calcium_hydroxide_solution", + "ragium:flowing_calcium_hydroxide_solution" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/carbon_dioxide.json b/src/generated/resources/data/c/tags/fluid/carbon_dioxide.json new file mode 100644 index 000000000..569a44033 --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/carbon_dioxide.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:carbon_dioxide" + ] +} \ 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 6ce4deb51..db825acbd 100644 --- a/src/generated/resources/data/c/tags/fluid/gaseous.json +++ b/src/generated/resources/data/c/tags/fluid/gaseous.json @@ -1,5 +1,6 @@ { "values": [ + "#c:carbon_dioxide", "#c:chlorine", "#c:hydrogen", "#c:hydrogen_chloride", diff --git a/src/generated/resources/data/c/tags/item/buckets.json b/src/generated/resources/data/c/tags/item/buckets.json index 735e4cb61..70f248161 100644 --- a/src/generated/resources/data/c/tags/item/buckets.json +++ b/src/generated/resources/data/c/tags/item/buckets.json @@ -4,6 +4,8 @@ "#c:buckets/anti_rust_oil", "#c:buckets/aromatic_compound", "#c:buckets/bleach", + "#c:buckets/calcium_hydroxide_solution", + "#c:buckets/carbon_dioxide", "#c:buckets/chlorine", "#c:buckets/coal_tar", "#c:buckets/crude_oil", diff --git a/src/generated/resources/data/c/tags/item/buckets/calcium_hydroxide_solution.json b/src/generated/resources/data/c/tags/item/buckets/calcium_hydroxide_solution.json new file mode 100644 index 000000000..021779374 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/calcium_hydroxide_solution.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:calcium_hydroxide_solution_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets/carbon_dioxide.json b/src/generated/resources/data/c/tags/item/buckets/carbon_dioxide.json new file mode 100644 index 000000000..ec0f9fc7c --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/carbon_dioxide.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:carbon_dioxide_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 4decc30e5..aac1387a8 100644 --- a/src/generated/resources/data/c/tags/item/dusts.json +++ b/src/generated/resources/data/c/tags/item/dusts.json @@ -4,6 +4,8 @@ "#c:dusts/amethyst", "#c:dusts/bauxite", "#c:dusts/borax", + "#c:dusts/calcium_carbonate", + "#c:dusts/calcium_oxide", "#c:dusts/carbon", "#c:dusts/charcoal", "#c:dusts/coal", @@ -26,6 +28,7 @@ "#c:dusts/raginite", "#c:dusts/salt", "#c:dusts/silicon", + "#c:dusts/sodium_carbonate", "#c:dusts/sulfur", "#c:dusts/wood" ] diff --git a/src/generated/resources/data/c/tags/item/dusts/calcium_carbonate.json b/src/generated/resources/data/c/tags/item/dusts/calcium_carbonate.json new file mode 100644 index 000000000..5bad65c1f --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/calcium_carbonate.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:calcium_carbonate_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts/calcium_oxide.json b/src/generated/resources/data/c/tags/item/dusts/calcium_oxide.json new file mode 100644 index 000000000..fba81a24e --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/calcium_oxide.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:calcium_oxide_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts/sodium_carbonate.json b/src/generated/resources/data/c/tags/item/dusts/sodium_carbonate.json new file mode 100644 index 000000000..487d2b7ca --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/sodium_carbonate.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:sodium_carbonate_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/glass.json b/src/generated/resources/data/ragium/recipe/alloying/glass.json new file mode 100644 index 000000000..45bab79f2 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/glass.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 1, + "items": "#c:dusts/sodium_carbonate" + }, + "ingredient": { + "count": 2, + "items": "#c:dusts/quartz" + }, + "result": { + "count": 6, + "id": "minecraft:glass" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/obzinite_ingot.json b/src/generated/resources/data/ragium/recipe/alloying/obzinite_ingot.json deleted file mode 100644 index b1ab1a283..000000000 --- a/src/generated/resources/data/ragium/recipe/alloying/obzinite_ingot.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "ragium:alloying", - "extras": [ - { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/copper", - "c:ingots/copper" - ] - } - }, - { - "count": 1, - "items": "#c:dusts/obsidian" - } - ], - "ingredient": { - "count": 3, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/aluminum", - "c:ingots/aluminum" - ] - } - }, - "result": { - "count": 4, - "id": "ragium:black_steel_ingot" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/salt_dust_from_block.json b/src/generated/resources/data/ragium/recipe/bathing/mortar.json similarity index 59% rename from src/generated/resources/data/ragium/recipe/bathing/salt_dust_from_block.json rename to src/generated/resources/data/ragium/recipe/bathing/mortar.json index 83aab8897..f2e35bb8d 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/salt_dust_from_block.json +++ b/src/generated/resources/data/ragium/recipe/bathing/mortar.json @@ -1,16 +1,16 @@ { "type": "ragium:bathing", "fluid_ingredient": { - "amount": 1000, + "amount": 250, "fluids": "#c:water" }, "item_ingredient": { "count": 1, - "items": "#c:storage_blocks/dried_kelp" + "items": "ragium:cement" }, "result": { - "count": 6, - "id": "ragium:salt_dust" + "count": 1, + "id": "ragium:mortar" }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/tinted_glass.json b/src/generated/resources/data/ragium/recipe/bathing/tinted_glass.json deleted file mode 100644 index 3e3237620..000000000 --- a/src/generated/resources/data/ragium/recipe/bathing/tinted_glass.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 1000, - "fluids": "#c:molten_glass" - }, - "item_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/amethyst", - "c:gems/amethyst" - ] - } - }, - "result": { - "count": 2, - "id": "minecraft:tinted_glass" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/blasting/calcium_oxide_dust.json b/src/generated/resources/data/ragium/recipe/blasting/calcium_oxide_dust.json new file mode 100644 index 000000000..cd8af007b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/blasting/calcium_oxide_dust.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 0.15, + "ingredient": "#c:dusts/calcium_carbonate", + "result": { + "id": "ragium:calcium_oxide_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/blasting/sodium_carbonate_dust.json b/src/generated/resources/data/ragium/recipe/blasting/sodium_carbonate_dust.json new file mode 100644 index 000000000..5c40bbfb8 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/blasting/sodium_carbonate_dust.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 0.15, + "ingredient": "minecraft:dried_kelp", + "result": { + "id": "ragium:sodium_carbonate_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/calcium_carbonate_dust_from_calcite.json b/src/generated/resources/data/ragium/recipe/crushing/calcium_carbonate_dust_from_calcite.json new file mode 100644 index 000000000..73a1544e3 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/crushing/calcium_carbonate_dust_from_calcite.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:crushing", + "ingredient": { + "count": 1, + "items": "minecraft:calcite" + }, + "result": { + "count": 1, + "id": "ragium:calcium_carbonate_dust" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/calcium_hydroxide_solution.json b/src/generated/resources/data/ragium/recipe/mixing/calcium_hydroxide_solution.json new file mode 100644 index 000000000..f025a96b0 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/calcium_hydroxide_solution.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 1000, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dusts/calcium_oxide" + }, + "result": { + "amount": 1000, + "id": "ragium:calcium_hydroxide_solution" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/calcium_oxide_dust.json b/src/generated/resources/data/ragium/recipe/pyrolyzing/calcium_oxide_dust.json new file mode 100644 index 000000000..7b6805650 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/calcium_oxide_dust.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:pyrolyzing", + "fluid_result": { + "amount": 1000, + "id": "ragium:carbon_dioxide" + }, + "ingredient": { + "count": 1, + "items": "#c:dusts/calcium_carbonate" + }, + "item_result": { + "count": 1, + "id": "ragium:calcium_oxide_dust" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/calcium_carbonate_dust_from_solution.json b/src/generated/resources/data/ragium/recipe/reacting/calcium_carbonate_dust_from_solution.json new file mode 100644 index 000000000..fdb83b2ac --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/reacting/calcium_carbonate_dust_from_solution.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:reacting", + "fluid_result": { + "amount": 2000, + "id": "minecraft:water" + }, + "item_result": { + "count": 1, + "id": "ragium:calcium_carbonate_dust" + }, + "primary_ingredient": { + "amount": 1000, + "fluids": "#c:calcium_hydroxide_solution" + }, + "secondary_ingredient": { + "amount": 1000, + "fluids": "#c:carbon_dioxide" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/sodium_carbonate_dust_from_solution.json b/src/generated/resources/data/ragium/recipe/reacting/sodium_carbonate_dust_from_solution.json new file mode 100644 index 000000000..bf3369b22 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/reacting/sodium_carbonate_dust_from_solution.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:reacting", + "fluid_result": { + "amount": 2000, + "id": "minecraft:water" + }, + "item_result": { + "count": 1, + "id": "ragium:sodium_carbonate_dust" + }, + "primary_ingredient": { + "amount": 1000, + "fluids": "#c:sodium_hydroxide_solution" + }, + "secondary_ingredient": { + "amount": 1000, + "fluids": "#c:carbon_dioxide" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/bricks.json b/src/generated/resources/data/ragium/recipe/shaped/bricks.json new file mode 100644 index 000000000..e48ffb6c2 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/bricks.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:bricks/normal", + "B": "ragium:mortar" + }, + "pattern": [ + "AB", + "BA" + ], + "result": { + "id": "minecraft:bricks" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/nether_bricks.json b/src/generated/resources/data/ragium/recipe/shaped/nether_bricks.json new file mode 100644 index 000000000..8b8cdccfa --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/nether_bricks.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:bricks/nether", + "B": "ragium:mortar" + }, + "pattern": [ + "AB", + "BA" + ], + "result": { + "id": "minecraft:nether_bricks" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shapeless/cement.json b/src/generated/resources/data/ragium/recipe/shapeless/cement.json new file mode 100644 index 000000000..3f43b9d05 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shapeless/cement.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + "#c:sands", + "#c:dusts/calcium_oxide" + ], + "result": { + "count": 2, + "id": "ragium:cement" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shapeless/mortar.json b/src/generated/resources/data/ragium/recipe/shapeless/mortar.json new file mode 100644 index 000000000..e0e3b7e37 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shapeless/mortar.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + "#c:buckets/water", + "ragium:cement", + "ragium:cement", + "ragium:cement", + "ragium:cement" + ], + "result": { + "count": 4, + "id": "ragium:mortar" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/smelting/calcium_oxide_dust.json b/src/generated/resources/data/ragium/recipe/smelting/calcium_oxide_dust.json new file mode 100644 index 000000000..0b66d4608 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/smelting/calcium_oxide_dust.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 0.15, + "ingredient": "#c:dusts/calcium_carbonate", + "result": { + "id": "ragium:calcium_oxide_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/smelting/sodium_carbonate_dust.json b/src/generated/resources/data/ragium/recipe/smelting/sodium_carbonate_dust.json new file mode 100644 index 000000000..d6b4c276b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/smelting/sodium_carbonate_dust.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 0.15, + "ingredient": "minecraft:dried_kelp", + "result": { + "id": "ragium:sodium_carbonate_dust" + } +} \ 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 87575c2ae..87452f00c 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -13,11 +13,9 @@ sealed interface RagiumMaterial : @JvmField val entries: Sequence = sequence { yieldAll(Fuel.entries) - yieldAll(Mineral.entries) + yieldAll(DustLike.entries) yieldAll(Gem.entries) - yieldAll(Metal.entries) - yieldAll(Alloy.entries) - yieldAll(Other.entries) + yieldAll(MetalLike.entries) } @JvmField @@ -49,8 +47,22 @@ sealed interface RagiumMaterial : override val materialName: String = name.lowercase() } + /** + * @since 26.1.8 + */ + sealed interface DustLike : RagiumMaterial { + companion object { + @JvmField + val entries: Sequence = sequence { + yieldAll(Mineral.entries) + yieldAll(Chemicals.entries) + yieldAll(Other.entries) + } + } + } + enum class Mineral(langName: HTLangName, override val chemicalKey: ResourceKey?) : - RagiumMaterial, + DustLike, HTLangName by langName { // Minecraft REDSTONE("Redstone", "レッドストーン"), @@ -81,6 +93,49 @@ sealed interface RagiumMaterial : override val materialName: String = name.lowercase() } + /** + * @since 26.1.8 + */ + enum class Chemicals(langName: HTLangName, override val chemicalKey: ResourceKey?) : + DustLike, + HTLangName by langName { + // Common + CARBON("Carbon", "炭素", RagiumChemicals.CARBON), + + /** + * @since 26.1.8 + */ + SODIUM_CARBONATE("Sodium Carbonate", "炭酸ナトリウム"), + + /** + * @since 26.1.7 + */ + ALUMINA("Alumina", "アルミナ", RagiumChemicals.ALUMINUM_OXIDE), + + /** + * @since 26.1.7 + */ + SILICON("Silicon", "シリコン", RagiumChemicals.SILICON), + + /** + * @since 26.1.8 + */ + CALCIUM_CARBONATE("Calcium Carbonate", "炭酸カルシウム"), + + /** + * @since 26.1.8 + */ + CALCIUM_OXIDE("Calcium Oxide", "酸化カルシウム") + ; + + constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( + HTLangName(enName, jaName), + chemicalKey + ) + + override val materialName: String = name.lowercase() + } + enum class Gem(langName: HTLangName, override val chemicalKey: ResourceKey?) : RagiumMaterial, HTLangName by langName { @@ -114,8 +169,21 @@ sealed interface RagiumMaterial : override val materialName: String = name.lowercase() } + /** + * @since 26.1.8 + */ + sealed interface MetalLike : RagiumMaterial { + companion object { + @JvmField + val entries: Sequence = sequence { + yieldAll(Metal.entries) + yieldAll(Alloy.entries) + } + } + } + enum class Metal(langName: HTLangName, override val chemicalKey: ResourceKey?) : - RagiumMaterial, + MetalLike, HTLangName by langName { // Minecraft COPPER("Copper", "銅", RagiumChemicals.COPPER), @@ -139,7 +207,7 @@ sealed interface RagiumMaterial : } enum class Alloy(langName: HTLangName, override val chemicalKey: ResourceKey?) : - RagiumMaterial, + MetalLike, HTLangName by langName { // Minecraft NETHERITE("Netherite", "ネザライト"), @@ -171,7 +239,7 @@ sealed interface RagiumMaterial : } enum class Other(langName: HTLangName, override val chemicalKey: ResourceKey?) : - RagiumMaterial, + DustLike, HTLangName by langName { // Minecraft WOOD("Wood", "木") { @@ -181,20 +249,7 @@ sealed interface RagiumMaterial : OBSIDIAN("Obsidian", "黒曜石"), PAPER("Paper", "紙") { override val isPulp: Boolean = true - }, - - // Common - CARBON("Carbon", "炭素", RagiumChemicals.CARBON), - - /** - * @since 26.1.7 - */ - ALUMINA("Alumina", "アルミナ", RagiumChemicals.ALUMINUM_OXIDE), - - /** - * @since 26.1.7 - */ - SILICON("Silicon", "シリコン", RagiumChemicals.SILICON) + } ; constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt index 00576ad08..389e32422 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt @@ -28,7 +28,6 @@ data object RagiumFluids { @JvmStatic fun register(eventBus: IEventBus) { - 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") @@ -143,6 +142,9 @@ data object RagiumFluids { // Chemical // // C + @JvmField + val CARBON_DIOXIDE: HTFluidContent.Virtual = REGISTER.registerVirtual("carbon_dioxide") { properties = gaseous() } + @JvmField val WOOD_TAR: HTFluidContent.Virtual = REGISTER.registerVirtual("wood_tar") { properties = liquid() @@ -251,6 +253,12 @@ data object RagiumFluids { @JvmField val BLEACH: HTFluidContent.Virtual = REGISTER.registerVirtual("bleach") { properties = liquid() } + // Ca + @JvmField + val CAOH_SOLUTION: HTFluidContent.Flowing = REGISTER.registerFlowing("calcium_hydroxide_solution") { + properties = liquid() + } + // Other @JvmField val ORE_SLURRY: HTFluidContent.Virtual = REGISTER.registerVirtual("ore_slurry") { diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index 7b9253502..44048f4d9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -63,10 +63,9 @@ data object RagiumItems { putAll(RagiumMaterial.Fuel.COAL_COKE, HTItemPart.TINY) putAll(RagiumMaterial.Fuel.PITCH_COKE, HTItemPart.TINY) // Mineral - for (mineral: RagiumMaterial.Mineral in RagiumMaterial.Mineral.entries) { - if (!mineral.isVanilla) { - putAll(mineral, HTItemPart.DUST) - } + for (dustLike: RagiumMaterial.DustLike in RagiumMaterial.DustLike.entries) { + if (dustLike is RagiumMaterial.Mineral && dustLike.isVanilla) continue + putAll(dustLike, HTItemPart.DUST) } // Gem putAll(RagiumMaterial.Gem.LAPIS, HTItemPart.DUST) @@ -89,13 +88,7 @@ data object RagiumItems { putAll(RagiumMaterial.Alloy.BLACK_STEEL, HTItemPart.INGOT, HTItemPart.NUGGET) putAll(RagiumMaterial.Alloy.VOID_METAL, HTItemPart.INGOT, HTItemPart.NUGGET) // Other - putAll(RagiumMaterial.Other.WOOD, HTItemPart.DUST, HTItemPart.GEAR) - putAll(RagiumMaterial.Other.GLASS, HTItemPart.DUST) - putAll(RagiumMaterial.Other.OBSIDIAN, HTItemPart.DUST) - putAll(RagiumMaterial.Other.PAPER, HTItemPart.DUST) - putAll(RagiumMaterial.Other.CARBON, HTItemPart.DUST) - putAll(RagiumMaterial.Other.ALUMINA, HTItemPart.DUST) - putAll(RagiumMaterial.Other.SILICON, HTItemPart.DUST) + putAll(RagiumMaterial.Other.WOOD, HTItemPart.GEAR) }, ::sortedSetOf ).flatMapTable { (material: RagiumMaterial, parts: Collection) -> @@ -130,6 +123,15 @@ data object RagiumItems { @JvmField val BAMBOO_CHARCOAL: HTSimpleDeferredItem = REGISTER.registerSimpleItem("bamboo_charcoal") + @JvmField + val PARTICLE_BOARD: HTSimpleDeferredItem = REGISTER.registerSimpleItem("particle_board") + + @JvmField + val CEMENT: HTSimpleDeferredItem = REGISTER.registerSimpleItem("cement") + + @JvmField + val MORTAR: HTSimpleDeferredItem = REGISTER.registerSimpleItem("mortar") + // Heat @JvmField val COAL_COKE: HTSimpleDeferredItem = REGISTER.registerSimpleItem(RagiumMaterial.Fuel.COAL_COKE.materialName) { @@ -145,9 +147,6 @@ data object RagiumItems { } // Chemical - @JvmField - val PARTICLE_BOARD: HTSimpleDeferredItem = REGISTER.registerSimpleItem("particle_board") - @JvmField val PLASTIC_PLATE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("plastic_plate") diff --git a/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMaterialHelper.kt b/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMaterialHelper.kt index a04e052d4..8cffa6999 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMaterialHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMaterialHelper.kt @@ -2,15 +2,52 @@ package hiiragi283.ragium.common.material import hiiragi283.lib.registry.HTSimpleDeferredItem import hiiragi283.lib.resource.vanillaId +import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.common.item.RagiumItems data object RagiumMaterialHelper { @JvmStatic - fun getFuelBase(fuel: RagiumMaterial.Fuel): HTSimpleDeferredItem = when (fuel) { + fun getBase(fuel: RagiumMaterial.Fuel): HTSimpleDeferredItem = when (fuel) { RagiumMaterial.Fuel.COAL -> HTSimpleDeferredItem(vanillaId("coal")) RagiumMaterial.Fuel.CHARCOAL -> HTSimpleDeferredItem(vanillaId("charcoal")) RagiumMaterial.Fuel.COAL_COKE -> RagiumItems.COAL_COKE RagiumMaterial.Fuel.PITCH_COKE -> RagiumItems.PITCH_COKE } + + @JvmStatic + fun getDust(dustLike: RagiumMaterial.DustLike): HTSimpleDeferredItem = when (dustLike) { + RagiumMaterial.Mineral.REDSTONE -> HTSimpleDeferredItem(vanillaId("redstone")) + RagiumMaterial.Mineral.GLOWSTONE -> HTSimpleDeferredItem(vanillaId("glowstone_dust")) + else -> RagiumItems.getOrThrow(HTItemPart.DUST, dustLike) + } + + @JvmStatic + fun getGem(gem: RagiumMaterial.Gem): HTSimpleDeferredItem = when (gem) { + RagiumMaterial.Gem.LAPIS -> HTSimpleDeferredItem(vanillaId("lapis_lazuri")) + RagiumMaterial.Gem.QUARTZ -> HTSimpleDeferredItem(vanillaId("quartz")) + RagiumMaterial.Gem.AMETHYST -> HTSimpleDeferredItem(vanillaId("amethyst_shard")) + RagiumMaterial.Gem.DIAMOND -> HTSimpleDeferredItem(vanillaId("diamond")) + RagiumMaterial.Gem.EMERALD -> HTSimpleDeferredItem(vanillaId("emerald")) + RagiumMaterial.Gem.ECHO -> HTSimpleDeferredItem(vanillaId("echo_shard")) + RagiumMaterial.Gem.PRISMARINE -> HTSimpleDeferredItem(vanillaId("prismarine_crystals")) + else -> RagiumItems.getOrThrow(HTItemPart.GEM, gem) + } + + @JvmStatic + fun getIngot(metalLike: RagiumMaterial.MetalLike): HTSimpleDeferredItem = when (metalLike) { + RagiumMaterial.Metal.COPPER -> HTSimpleDeferredItem(vanillaId("copper_ingot")) + RagiumMaterial.Metal.IRON -> HTSimpleDeferredItem(vanillaId("iron_ingot")) + RagiumMaterial.Metal.GOLD -> HTSimpleDeferredItem(vanillaId("gold_ingot")) + RagiumMaterial.Alloy.NETHERITE -> HTSimpleDeferredItem(vanillaId("netherite_ingot")) + else -> RagiumItems.getOrThrow(HTItemPart.INGOT, metalLike) + } + + @JvmStatic + fun getNugget(metalLike: RagiumMaterial.MetalLike): HTSimpleDeferredItem = when (metalLike) { + RagiumMaterial.Metal.COPPER -> HTSimpleDeferredItem(vanillaId("copper_nugget")) + RagiumMaterial.Metal.IRON -> HTSimpleDeferredItem(vanillaId("iron_nugget")) + RagiumMaterial.Metal.GOLD -> HTSimpleDeferredItem(vanillaId("gold_nugget")) + else -> RagiumItems.getOrThrow(HTItemPart.NUGGET, metalLike) + } } diff --git a/src/main/resources/assets/ragium/textures/item/calcium_carbonate_dust.png b/src/main/resources/assets/ragium/textures/item/calcium_carbonate_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..71316781ac03034c7d3923c3e7404d522c674c16 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`mpok@Ln`8uC7vaGeRcJ}qr`mk znFXFrCR$orMiP>eh7XKcRx>K_D)crrH6?s@{PO1J=Ksl?c@8toNSpEK`}_OG4KYlI zZtx_!n2E+3`@H-2_cxD1vx6Sv#^B)Khrb@^HT;yk`Ku~gNRh1n?*CJYS6$|?kBUlBb5 P^c{nztDnm{r-UW|0v=)W literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/item/calcium_oxide_dust.png b/src/main/resources/assets/ragium/textures/item/calcium_oxide_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..71316781ac03034c7d3923c3e7404d522c674c16 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`mpok@Ln`8uC7vaGeRcJ}qr`mk znFXFrCR$orMiP>eh7XKcRx>K_D)crrH6?s@{PO1J=Ksl?c@8toNSpEK`}_OG4KYlI zZtx_!n2E+3`@H-2_cxD1vx6Sv#^B)Khrb@^HT;yk`Ku~gNRh1n?*CJYS6$|?kBUlBb5 P^c{nztDnm{r-UW|0v=)W literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/item/sodium_carbonate_dust.png b/src/main/resources/assets/ragium/textures/item/sodium_carbonate_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..71316781ac03034c7d3923c3e7404d522c674c16 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`mpok@Ln`8uC7vaGeRcJ}qr`mk znFXFrCR$orMiP>eh7XKcRx>K_D)crrH6?s@{PO1J=Ksl?c@8toNSpEK`}_OG4KYlI zZtx_!n2E+3`@H-2_cxD1vx6Sv#^B)Khrb@^HT;yk`Ku~gNRh1n?*CJYS6$|?kBUlBb5 P^c{nztDnm{r-UW|0v=)W literal 0 HcmV?d00001 From 8cc1da2fc0a7f8242b3b04dae4af943f53d300aa Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 27 Sep 2026 01:04:24 +0900 Subject: [PATCH 13/14] =?UTF-8?q?feat:=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=80=8CSticky=20Ball=20/?= =?UTF-8?q?=20=E7=B2=98=E7=9D=80=E8=B3=AA=E3=81=AE=E5=A1=8A=E3=80=8D?= =?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 --- .../data/lang/RagiumEnglishLangProvider.kt | 1 + .../data/lang/RagiumJapaneseLangProvider.kt | 1 + .../recipe/RagiumChemicalRecipeProvider.kt | 23 ++++++++++++++++++ .../data/recipe/RagiumHeatRecipeProvider.kt | 9 +++++++ .../ragium/data/tag/RagiumItemTagsProvider.kt | 4 ++- .../assets/ragium/items/sticky_ball.json | 6 +++++ .../resources/assets/ragium/lang/en_us.json | 1 + .../resources/assets/ragium/lang/ja_jp.json | 1 + .../ragium/models/item/sticky_ball.json | 6 +++++ .../data/c/tags/item/sticky_balls.json | 3 ++- .../ragium/recipe/bathing/particle_board.json | 16 ++++++++++++ .../ragium/recipe/freezing/sticky_ball.json | 12 +++++++++ .../ragium/common/item/RagiumItems.kt | 3 +++ .../ragium/textures/item/sticky_ball.png | Bin 0 -> 302 bytes 14 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 src/generated/resources/assets/ragium/items/sticky_ball.json create mode 100644 src/generated/resources/assets/ragium/models/item/sticky_ball.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/particle_board.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/sticky_ball.json create mode 100644 src/main/resources/assets/ragium/textures/item/sticky_ball.png diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 6ab1afde8..a0b0503a5 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -132,6 +132,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumItems.CEMENT, "Cement") add(RagiumItems.MORTAR, "Mortar") add(RagiumItems.TAR, "Tar") + add(RagiumItems.STICKY_BALL, "Sticky Ball") add(RagiumItems.PLASTIC_PLATE, "Plastic Plate") add(RagiumItems.SYNTHETIC_FEATHER, "Synthetic Feather") add(RagiumItems.SYNTHETIC_FIBER, "Synthetic Fiber") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index f101ab3c6..98197ca87 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -128,6 +128,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumItems.CEMENT, "セメント") add(RagiumItems.MORTAR, "モルタル") add(RagiumItems.TAR, "タール") + add(RagiumItems.STICKY_BALL, "粘着質な塊") add(RagiumItems.PLASTIC_PLATE, "プラスチック板") add(RagiumItems.SYNTHETIC_FEATHER, "合成羽") add(RagiumItems.SYNTHETIC_FIBER, "合成繊維") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt index 74df04d61..f7a4abf19 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt @@ -1,16 +1,39 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.data.recipe.HTRecipeProvider +import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders +import hiiragi283.ragium.api.material.RagiumMaterial +import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.item.RagiumItems import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput +import net.minecraft.world.item.Items import java.util.concurrent.CompletableFuture class RagiumChemicalRecipeProvider(packOutput: PackOutput, future: CompletableFuture) : HTRecipeProvider(packOutput, future, RagiumAPI.MOD_ID) { override fun exportValues() { + // Wood Pulp + Resin -> Particle Board + RagiumRecipeBuilders.bathing { + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.WOOD) } + fluidIngredient { + +holderSet(RagiumTags.Fluids.RESINS) + amount /= 8 + } + result { +RagiumItems.PARTICLE_BOARD } + }.save(exporter) + // Piston + Resin -> Sticky Piston + RagiumRecipeBuilders.bathing { + itemIngredient { items { +Items.PISTON } } + fluidIngredient { + +holderSet(RagiumTags.Fluids.RESINS) + amount /= 8 + } + result { +Items.STICKY_PISTON } + }.save(exporter) + // Cement + Water -> Mortar RagiumRecipeBuilders.bathing { itemIngredient { items { +RagiumItems.CEMENT } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index d67f648fb..ebde48cd3 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -132,6 +132,15 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture ingredient { +holderSet(RagiumFluids.MOLTEN_GLASS) } result { +Items.GLASS } }.save(exporter) + + // Sticky Ball + RagiumRecipeBuilders.freezing { + ingredient { + +holderSet(RagiumTags.Fluids.RESINS) + amount /= 4 + } + result { +RagiumItems.STICKY_BALL } + }.save(exporter) } private fun melting() { diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index bc14d6762..189c18db1 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -73,7 +73,9 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu 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(Tags.Items.SLIME_BALLS) + .addTag(Tags.Items.SLIME_BALLS) + .add(RagiumItems.STICKY_BALL) builder(RagiumTags.Items.COALS) .add(RagiumItems.BAMBOO_CHARCOAL) diff --git a/src/generated/resources/assets/ragium/items/sticky_ball.json b/src/generated/resources/assets/ragium/items/sticky_ball.json new file mode 100644 index 000000000..481f769dc --- /dev/null +++ b/src/generated/resources/assets/ragium/items/sticky_ball.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/sticky_ball" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 7e32ebe48..a1b976777 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -309,6 +309,7 @@ "item.ragium.sooty_iron_shovel": "Sooty Iron Shovel", "item.ragium.sooty_iron_sword": "Sooty Iron Sword", "item.ragium.splash_bottle": "Splash Bottle", + "item.ragium.sticky_ball": "Sticky Ball", "item.ragium.sulfur_dioxide_bucket": "Sulfur Dioxide Bucket", "item.ragium.sulfur_dust": "Sulfur Dust", "item.ragium.sulfur_trioxide_bucket": "Sulfur Trioxide Bucket", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index b4e0a8c17..3dabc55b3 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -309,6 +309,7 @@ "item.ragium.sooty_iron_shovel": "煤鉄のショベル", "item.ragium.sooty_iron_sword": "煤鉄の剣", "item.ragium.splash_bottle": "スプラッシュ瓶", + "item.ragium.sticky_ball": "粘着質な塊", "item.ragium.sulfur_dioxide_bucket": "二酸化硫黄入りバケツ", "item.ragium.sulfur_dust": "硫黄の粉", "item.ragium.sulfur_trioxide_bucket": "三酸化硫黄入りバケツ", diff --git a/src/generated/resources/assets/ragium/models/item/sticky_ball.json b/src/generated/resources/assets/ragium/models/item/sticky_ball.json new file mode 100644 index 000000000..305ca35ab --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/sticky_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/sticky_ball" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/sticky_balls.json b/src/generated/resources/data/c/tags/item/sticky_balls.json index a99bc9dea..f9f3b6521 100644 --- a/src/generated/resources/data/c/tags/item/sticky_balls.json +++ b/src/generated/resources/data/c/tags/item/sticky_balls.json @@ -1,5 +1,6 @@ { "values": [ - "#c:slime_balls" + "#c:slime_balls", + "ragium:sticky_ball" ] } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/particle_board.json b/src/generated/resources/data/ragium/recipe/bathing/particle_board.json new file mode 100644 index 000000000..717a98c83 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/particle_board.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#ragium:resins" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dusts/wood" + }, + "result": { + "count": 1, + "id": "ragium:particle_board" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/sticky_ball.json b/src/generated/resources/data/ragium/recipe/freezing/sticky_ball.json new file mode 100644 index 000000000..97893ca52 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/sticky_ball.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#ragium:resins" + }, + "result": { + "count": 1, + "id": "ragium:sticky_ball" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index 44048f4d9..d7d2b04a8 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -146,6 +146,9 @@ data object RagiumItems { it.delayedHolderComponent(RagiumDataComponents.CHEMICAL, RagiumChemicals.CARBON) } + @JvmField + val STICKY_BALL: HTSimpleDeferredItem = REGISTER.registerSimpleItem("sticky_ball") + // Chemical @JvmField val PLASTIC_PLATE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("plastic_plate") diff --git a/src/main/resources/assets/ragium/textures/item/sticky_ball.png b/src/main/resources/assets/ragium/textures/item/sticky_ball.png new file mode 100644 index 0000000000000000000000000000000000000000..641e8185c104bd368cebdaa4f522368d4d4b90e1 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k3C%+Ln;`z^cnIwItsK+pB1NM zwdkUzNY>UPtR;L8m=*v6s%hFY wf6rpANM84!iGkt&|1WjtwSnGc19_L3LF09W;@vw2aX=9UPgg&ebxsLQ0K>g=V*mgE literal 0 HcmV?d00001 From e2fdb9a50b499fd575492f9bc801fd8086f50a2e Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 27 Sep 2026 19:38:38 +0900 Subject: [PATCH 14/14] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=AC=E3=82=B7=E3=83=94=E3=82=BF=E3=82=A4=E3=83=97=E3=80=8C?= =?UTF-8?q?Washing=20/=20=E6=B4=97=E6=B5=84=E3=80=8D=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=20feat!:=20HTOreSlurryData=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 | 8 -- .../client/integration/jei/RagiumJeiPlugin.kt | 53 +--------- .../integration/jei/RagiumJeiRecipeTypes.kt | 5 + .../jei/category/RTWashingRecipeCategory.kt | 49 +++++++++ .../hiiragi283/ragium/data/RagiumDataGen.kt | 2 - .../data/lang/RagiumEnglishLangProvider.kt | 12 +-- .../data/lang/RagiumJapaneseLangProvider.kt | 12 +-- .../ragium/data/model/RagiumModelProvider.kt | 2 - .../recipe/RagiumChemicalRecipeProvider.kt | 99 ++++++++++++++++++- .../recipe/RagiumMechanicalRecipeProvider.kt | 35 +------ .../ragium/data/tag/RagiumItemTagsProvider.kt | 2 +- .../ragium/items/ore_slurry_bucket.json | 12 --- .../resources/assets/ragium/lang/en_us.json | 7 +- .../resources/assets/ragium/lang/ja_jp.json | 7 +- .../data/c/tags/fluid/ore_slurry.json | 5 - .../resources/data/c/tags/item/buckets.json | 1 - .../data/c/tags/item/buckets/ore_slurry.json | 5 - .../ragium/ragium/ore_slurry_data/copper.json | 17 ---- .../ragium/ragium/ore_slurry_data/gold.json | 17 ---- .../ragium/ragium/ore_slurry_data/iron.json | 17 ---- .../ore_slurry_data/netherite_scrap.json | 10 -- .../ragium/recipe/bathing/sticky_piston.json | 16 +++ .../ragium/recipe/crushing/packed_ice.json | 18 ---- .../data/ragium/recipe/crushing/red_sand.json | 14 +-- .../data/ragium/recipe/crushing/sand.json | 14 +-- .../recipe/washing/copper_dust_from_raw.json | 16 +++ .../recipe/washing/gold_dust_from_raw.json | 16 +++ .../recipe/washing/iron_dust_from_raw.json | 16 +++ .../washing/netherite_scrap_from_debris.json | 16 +++ .../ragium/recipe/washing/packed_ice.json | 22 +++++ .../washing/quartz_dust_from_red_sands.json | 22 +++++ .../washing/quartz_dust_from_sands.json | 22 +++++ .../recipe/base/HTItemToDoubleItemRecipe.kt | 8 +- .../hiiragi283/ragium/api/RagiumConstants.kt | 2 + .../hiiragi283/ragium/api/RagiumRegistries.kt | 12 --- .../ragium/api/data/RagiumDataComponents.kt | 8 -- .../api/data/oreSlurry/HTOreSlurryData.kt | 50 ---------- .../data/oreSlurry/HTOreSlurryDataHelper.kt | 49 --------- .../data/oreSlurry/HTOreSlurryFluidAccess.kt | 20 ---- .../api/data/oreSlurry/RagiumOreSlurryData.kt | 78 --------------- .../recipe/builder/RTWashingRecipeBuilder.kt | 64 ++++++++++++ .../recipe/builder/RagiumRecipeBuilders.kt | 8 ++ .../ragium/api/recipe/RTWashingRecipe.kt | 81 +++++++++++++++ .../ragium/api/recipe/RagiumRecipeLookups.kt | 3 + .../api/recipe/RagiumRecipeSerializers.kt | 4 + .../ragium/api/recipe/RagiumRecipeTypes.kt | 3 + .../HTItemAndFluidToItemRecipeCategory.kt | 2 +- .../HTItemToDoubleItemRecipeCategory.kt | 6 +- .../kotlin/hiiragi283/ragium/common/Ragium.kt | 1 - .../hiiragi283/ragium/common/RagiumCommon.kt | 9 -- .../oreSlurry/RagiumOreSlurryFluidAccess.kt | 9 -- .../common/fluid/HTOreSlurryFluidType.kt | 15 --- .../ragium/common/fluid/RagiumFluids.kt | 9 -- .../common/item/HTOreSlurryBucketItem.kt | 51 ---------- .../ragium/common/item/RagiumItems.kt | 11 --- .../common/recipe/RTOreSlurryWashingRecipe.kt | 34 ------- .../common/recipe/RTOreSolvingRecipe.kt | 32 ------ ....api.data.oreSlurry.HTOreSlurryFluidAccess | 1 - 58 files changed, 491 insertions(+), 648 deletions(-) create mode 100644 src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTWashingRecipeCategory.kt delete mode 100644 src/generated/resources/assets/ragium/items/ore_slurry_bucket.json delete mode 100644 src/generated/resources/data/c/tags/fluid/ore_slurry.json delete mode 100644 src/generated/resources/data/c/tags/item/buckets/ore_slurry.json delete mode 100644 src/generated/resources/data/ragium/ragium/ore_slurry_data/copper.json delete mode 100644 src/generated/resources/data/ragium/ragium/ore_slurry_data/gold.json delete mode 100644 src/generated/resources/data/ragium/ragium/ore_slurry_data/iron.json delete mode 100644 src/generated/resources/data/ragium/ragium/ore_slurry_data/netherite_scrap.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/sticky_piston.json delete mode 100644 src/generated/resources/data/ragium/recipe/crushing/packed_ice.json create mode 100644 src/generated/resources/data/ragium/recipe/washing/copper_dust_from_raw.json create mode 100644 src/generated/resources/data/ragium/recipe/washing/gold_dust_from_raw.json create mode 100644 src/generated/resources/data/ragium/recipe/washing/iron_dust_from_raw.json create mode 100644 src/generated/resources/data/ragium/recipe/washing/netherite_scrap_from_debris.json create mode 100644 src/generated/resources/data/ragium/recipe/washing/packed_ice.json create mode 100644 src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_red_sands.json create mode 100644 src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_sands.json delete mode 100644 src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt delete mode 100644 src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryDataHelper.kt delete mode 100644 src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryFluidAccess.kt delete mode 100644 src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTWashingRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/data/oreSlurry/RagiumOreSlurryFluidAccess.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/fluid/HTOreSlurryFluidType.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/item/HTOreSlurryBucketItem.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSlurryWashingRecipe.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSolvingRecipe.kt delete mode 100644 src/main/resources/META-INF/services/hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryFluidAccess diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 133e229f2..9154657d9 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -14,7 +14,6 @@ import hiiragi283.lib.text.Text import hiiragi283.lib.transfer.fluid.HTFluidView import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.chemical.HTClientChemicalHelper -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.client.gui.screen.HTWidgetContainerScreen import hiiragi283.ragium.client.gui.screen.tooltip.HTMemoryDiscClientTooltipComponent @@ -232,13 +231,6 @@ data object RagiumClient : HTClientMod() { dull() colorTint(Color(0x333399)) } - - register.register(RagiumFluids.ORE_SLURRY) { - still = Material(vanillaId(HTConstants.BLOCK, "white_concrete_powder")) - tintSource = FluidStackTintSource { stack: FluidStack -> - ARGB.opaque(HTOreSlurryDataHelper.getData(stack)?.color ?: 0x333300) - } - } } override fun registerScreens(event: RegisterMenuScreensEvent) { 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 a143a1995..330a8f932 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -17,10 +17,7 @@ import hiiragi283.lib.recipe.ingredient.HTPotionFluidIngredient import hiiragi283.lib.registry.asHolderSequence import hiiragi283.lib.registry.getKeyOrThrow import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.RagiumRegistries import hiiragi283.ragium.api.data.RagiumDataComponents -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryData -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders import hiiragi283.ragium.api.recipe.RagiumRecipeLookups import hiiragi283.ragium.client.gui.screen.HTWidgetContainerScreen @@ -29,6 +26,7 @@ import hiiragi283.ragium.client.integration.jei.category.RTEnchantingRecipeCateg import hiiragi283.ragium.client.integration.jei.category.RTReactingRecipeCategory import hiiragi283.ragium.client.integration.jei.category.RTRefiningRecipeCategory import hiiragi283.ragium.client.integration.jei.category.RTResourceExtractingRecipeCategory +import hiiragi283.ragium.client.integration.jei.category.RTWashingRecipeCategory import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.recipe.RTPotionBottleDrainingRecipe @@ -51,10 +49,7 @@ import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.world.item.Item import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.alchemy.Potions -import net.minecraft.world.item.crafting.display.SlotDisplay -import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.fluids.FluidStack -import net.neoforged.neoforge.fluids.crafting.display.FluidTagSlotDisplay @JeiPlugin class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { @@ -82,11 +77,6 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { // Creative Tank registration.registerFromDataComponentTypes(RagiumBlocks.CREATIVE_TANK.asItem(), RagiumDataComponents.FLUID) - // Ore Slurry Bucket - registration.registerFromDataComponentTypes( - RagiumFluids.ORE_SLURRY.bucketHolder.get(), - RagiumDataComponents.ORE_SLURRY_DATA - ) } override fun registerFluidSubtypes( @@ -97,10 +87,6 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { NeoForgeTypes.FLUID_STACK, RagiumFluids.POTION.getOrThrow() ) { stack: FluidStack, _ -> HTPotionHelper.getContents(stack) } - registration.registerSubtypeInterpreter( - NeoForgeTypes.FLUID_STACK, - RagiumFluids.ORE_SLURRY.getOrThrow() - ) { stack: FluidStack, _ -> HTOreSlurryDataHelper.getHolder(stack) } } override fun registerIngredients(registration: IModIngredientRegistration) { @@ -115,13 +101,6 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { .map(HTPotionHelper::createFluid) .toList() ) - registration.addExtraIngredients( - NeoForgeTypes.FLUID_STACK, - HTPhysicalSideHelper.registryOrThrow(RagiumRegistries.Keys.ORE_SLURRY_DATA) - .asHolderSequence() - .map(HTOreSlurryDataHelper::createFluid) - .toList() - ) } override fun registerCategories(registration: IRecipeCategoryRegistration) { @@ -146,6 +125,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { RTElectrolyzingRecipeCategory(guiHelper), HTItemAndFluidToFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.MIXING), RTReactingRecipeCategory(guiHelper), + RTWashingRecipeCategory(guiHelper), // Bio HTItemAndFluidToFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.BREWING), HTItemToDoubleItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.PLANTING), @@ -174,6 +154,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.BATHING, RagiumRecipeLookups.BATHING) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.MIXING, RagiumRecipeLookups.MIXING) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.REACTING, RagiumRecipeLookups.REACTING) + HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.WASHING, RagiumRecipeLookups.WASHING) // Bio HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.BREWING, RagiumRecipeLookups.BREWING) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.PLANTING, RagiumRecipeLookups.PLANTING) @@ -238,34 +219,6 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { }.toList() ) // Chemical - registration.addRecipes( - RagiumJeiRecipeTypes.MIXING, - listItems() - .mapNotNull { input: Holder -> - val result: FluidStack = - HTOreSlurryDataHelper.createFluid(input.components()) ?: return@mapNotNull null - RagiumRecipeBuilders.mixing { - itemIngredient = HTJeiRecipeHelper.fakeItem(SlotDisplay.ItemSlotDisplay(input)) - fluidIngredient = HTJeiRecipeHelper.fakeFluid(RagiumFluids.SULFURIC_ACID) - result { from(result) } - recipeId replace input.getKeyOrThrow().identifier().withPrefix("solving/") - }.buildSynthetic() - }.toList() - ) - - registration.addRecipes( - RagiumJeiRecipeTypes.REACTING, - HTPhysicalSideHelper.registryOrThrow(RagiumRegistries.Keys.ORE_SLURRY_DATA) - .asHolderSequence() - .map { holder: Holder -> - RagiumRecipeBuilders.reacting { - primaryIngredient = HTJeiRecipeHelper.fakeFluid(HTOreSlurryDataHelper.createFluid(holder)) - secondaryIngredient = HTJeiRecipeHelper.fakeFluid(FluidTagSlotDisplay(Tags.Fluids.WATER)) - +holder.value().result - recipeId replace holder.getKeyOrThrow().identifier().withPrefix("ore_slurry/") - }.buildSynthetic() - }.toList() - ) } override fun registerRecipeCatalysts(registration: IRecipeCatalystRegistration) { 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 11d0e340e..f3a83b664 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -14,6 +14,7 @@ import hiiragi283.ragium.api.recipe.RTEnchantingRecipe import hiiragi283.ragium.api.recipe.RTReactingRecipe import hiiragi283.ragium.api.recipe.RTRefiningRecipe import hiiragi283.ragium.api.recipe.RTResourceExtractingRecipe +import hiiragi283.ragium.api.recipe.RTWashingRecipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.common.block.RagiumBlocks @@ -81,6 +82,10 @@ data object RagiumJeiRecipeTypes { val REACTING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.REACTING, RagiumBlocks.CHEMICAL_REACTOR) + @JvmField + val WASHING: HTHolderJeiRecipeType = + HTJeiRecipeType(RagiumRecipeTypes.WASHING, RagiumBlocks.MACHINE_CASING) + // Bio @JvmField val BREWING: HTHolderJeiRecipeType = diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTWashingRecipeCategory.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTWashingRecipeCategory.kt new file mode 100644 index 000000000..bbf191ac6 --- /dev/null +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTWashingRecipeCategory.kt @@ -0,0 +1,49 @@ +package hiiragi283.ragium.client.integration.jei.category + +import hiiragi283.lib.gui.HTBackgroundType +import hiiragi283.lib.integration.jei.add +import hiiragi283.lib.integration.jei.category.HTHolderRecipeCategory +import hiiragi283.ragium.api.recipe.RTWashingRecipe +import hiiragi283.ragium.client.integration.jei.RagiumJeiRecipeTypes +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder +import mezz.jei.api.gui.builder.IRecipeSlotBuilder +import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder +import mezz.jei.api.helpers.IGuiHelper +import mezz.jei.api.recipe.IFocusGroup + +class RTWashingRecipeCategory(guiHelper: IGuiHelper) : + HTHolderRecipeCategory( + guiHelper, + RagiumJeiRecipeTypes.WASHING, + 18 * 8, + 18 * 1, + RTWashingRecipe.CODEC + ) { + override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RTWashingRecipe, focuses: IFocusGroup) { + // inputs + builder + .addInputSlot(getPosition(0), getPosition(0)) + .add(recipe.fluidIngredient) + .setSlotBackground(HTBackgroundType.INPUT) + builder + .addInputSlot(getPosition(2), getPosition(0)) + .add(recipe.itemIngredient) + .setSlotBackground(HTBackgroundType.INPUT) + // outputs + builder + .addOutputSlot(getPosition(5), getPosition(0)) + .add(recipe.results.head) + .setSlotBackground(HTBackgroundType.OUTPUT) + + val slot: IRecipeSlotBuilder = builder + .addOutputSlot(getPosition(7), getPosition(0)) + .setSlotBackground(HTBackgroundType.EXTRA_OUTPUT) + recipe.results.getOrNull(1)?.let(slot::add) + } + + override fun setupRecipeExtras(builder: IRecipeExtrasBuilder, recipe: RTWashingRecipe, focuses: IFocusGroup) { + builder.addRecipePlus(getPosition(1)) + builder.addRecipeArrow(recipe).setPosition(getPosition(3.25), getPosition(0)) + builder.addRecipePlus(getPosition(6)) + } +} diff --git a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt index f8f11c48e..9bc184cb0 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt @@ -4,7 +4,6 @@ import hiiragi283.lib.data.createLootTables import hiiragi283.ragium.api.RagiumRegistries import hiiragi283.ragium.api.data.chemical.RagiumChemicals import hiiragi283.ragium.api.data.element.RagiumElements -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 @@ -43,7 +42,6 @@ data object RagiumDataGen { .add(Registries.DAMAGE_TYPE, RagiumDamageTypes::bootstrap) .add(RagiumRegistries.Keys.ELEMENT, RagiumElements::bootstrap) .add(RagiumRegistries.Keys.CHEMICAL, RagiumChemicals::bootstrap) - .add(RagiumRegistries.Keys.ORE_SLURRY_DATA, RagiumOreSlurryData::bootstrap) .apply(RagiumWorldData::bootstrap) ) diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index a0b0503a5..c544998fa 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -6,7 +6,6 @@ import hiiragi283.lib.text.HTCommonTranslation import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.chemical.RagiumChemicals import hiiragi283.ragium.api.data.element.RagiumElements -import hiiragi283.ragium.api.data.oreSlurry.RagiumOreSlurryData import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.common.advancment.RagiumAdvancementKeys @@ -123,9 +122,6 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROCHLORIC_ACID, "Hydrochloric Acid") addFluid(RagiumFluids.BLEACH, "Bleach") addFluid(RagiumFluids.CAOH_SOLUTION, "Calcium Hydroxide Solution") - - add(RagiumFluids.ORE_SLURRY.getFluidType().descriptionId, "Invalid Ore Slurry") - add(RagiumFluids.ORE_SLURRY.bucketHolder, $$"%1$s Bucket") // Item add(RagiumItems.BAMBOO_CHARCOAL, "Bamboo Charcoal") add(RagiumItems.PARTICLE_BOARD, "Particle Board") @@ -135,11 +131,11 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumItems.STICKY_BALL, "Sticky Ball") add(RagiumItems.PLASTIC_PLATE, "Plastic Plate") add(RagiumItems.SYNTHETIC_FEATHER, "Synthetic Feather") + add(RagiumItems.SYNTHETIC_LEATHER, "Synthetic Leather") add(RagiumItems.SYNTHETIC_FIBER, "Synthetic Fiber") add(RagiumItems.CARBON_FIBER, "Carbon Fiber") add(RagiumItems.CFRP_PLATE, "CFRP Plate") add(RagiumItems.ALCLAD_PLATE, "Alclad Plate") - add(RagiumItems.SYNTHETIC_LEATHER, "Synthetic Leather") add(RagiumItems.BEESWAX, "Beeswax") add(RagiumItems.SPLASH_BOTTLE, "Splash Bottle") add(RagiumItems.LINGERING_BOTTLE, "Lingering Bottle") @@ -187,6 +183,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumRecipeTypes.CENTRIFUGING, "Centrifuging") add(RagiumRecipeTypes.MIXING, "Mixing") add(RagiumRecipeTypes.REACTING, "Chemical Reacting") + add(RagiumRecipeTypes.WASHING, "Washing") add(RagiumRecipeTypes.BREWING, "Brewing") add(RagiumRecipeTypes.PLANTING, "Planting") @@ -291,10 +288,5 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFromKey(RagiumElements.COPPER, "Copper") addFromKey(RagiumElements.GOLD, "Gold") - // Ore Slurry - addFromKey(RagiumOreSlurryData.COPPER, "Copper Ore Slurry") - addFromKey(RagiumOreSlurryData.IRON, "Iron Ore Slurry") - addFromKey(RagiumOreSlurryData.GOLD, "Gold Ore Slurry") - addFromKey(RagiumOreSlurryData.NETHERITE_SCRAP, "Ancient Debris Slurry") } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 98197ca87..a1c7c0f1d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -6,7 +6,6 @@ import hiiragi283.lib.text.HTCommonTranslation import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.chemical.RagiumChemicals import hiiragi283.ragium.api.data.element.RagiumElements -import hiiragi283.ragium.api.data.oreSlurry.RagiumOreSlurryData import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.common.advancment.RagiumAdvancementKeys @@ -119,9 +118,6 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROCHLORIC_ACID, "塩酸") addFluid(RagiumFluids.BLEACH, "漂白剤") addFluid(RagiumFluids.CAOH_SOLUTION, "水酸化カルシウム水溶液") - - add(RagiumFluids.ORE_SLURRY.getFluidType().descriptionId, "無効な鉱石泥") - add(RagiumFluids.ORE_SLURRY.bucketHolder, $$"%1$s入りバケツ") // Item add(RagiumItems.BAMBOO_CHARCOAL, "竹炭") add(RagiumItems.PARTICLE_BOARD, "パーティクルボード") @@ -131,11 +127,11 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumItems.STICKY_BALL, "粘着質な塊") add(RagiumItems.PLASTIC_PLATE, "プラスチック板") add(RagiumItems.SYNTHETIC_FEATHER, "合成羽") + add(RagiumItems.SYNTHETIC_LEATHER, "合成牛皮") add(RagiumItems.SYNTHETIC_FIBER, "合成繊維") add(RagiumItems.CARBON_FIBER, "炭素繊維") add(RagiumItems.CFRP_PLATE, "炭素繊維強化プラスチック板") add(RagiumItems.ALCLAD_PLATE, "アルクラッド板") - add(RagiumItems.SYNTHETIC_LEATHER, "合成牛皮") add(RagiumItems.BEESWAX, "密猟") add(RagiumItems.SPLASH_BOTTLE, "スプラッシュ瓶") add(RagiumItems.LINGERING_BOTTLE, "残留瓶") @@ -183,6 +179,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumRecipeTypes.CENTRIFUGING, "遠心分離") add(RagiumRecipeTypes.MIXING, "混合") add(RagiumRecipeTypes.REACTING, "化学反応") + add(RagiumRecipeTypes.WASHING, "洗浄") add(RagiumRecipeTypes.BREWING, "醸造") add(RagiumRecipeTypes.PLANTING, "栽培") @@ -287,10 +284,5 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFromKey(RagiumElements.COPPER, "銅") addFromKey(RagiumElements.GOLD, "金") - // Ore Slurry - addFromKey(RagiumOreSlurryData.COPPER, "銅の鉱石泥") - addFromKey(RagiumOreSlurryData.IRON, "鉄の鉱石泥") - addFromKey(RagiumOreSlurryData.GOLD, "金の鉱石泥") - addFromKey(RagiumOreSlurryData.NETHERITE_SCRAP, "古代の鉱石泥") } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt index b2f72d3fe..6925b46af 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt @@ -47,8 +47,6 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP add(RagiumFluids.CRUDE_OIL) add(RagiumFluids.SYNTHETIC_RESIN) add(RagiumFluids.SULFURIC_ACID) - - add(RagiumFluids.ORE_SLURRY) } for (content: HTFluidContent in RagiumFluids.REGISTER.asSequence()) { // Item diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt index f7a4abf19..aefa190ea 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt @@ -4,17 +4,22 @@ import hiiragi283.lib.data.recipe.HTRecipeProvider import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders +import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.api.tag.RagiumTags +import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.item.RagiumItems import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput import net.minecraft.world.item.Items +import net.neoforged.neoforge.common.Tags import java.util.concurrent.CompletableFuture class RagiumChemicalRecipeProvider(packOutput: PackOutput, future: CompletableFuture) : HTRecipeProvider(packOutput, future, RagiumAPI.MOD_ID) { override fun exportValues() { + washing() + // Wood Pulp + Resin -> Particle Board RagiumRecipeBuilders.bathing { itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.WOOD) } @@ -33,7 +38,7 @@ class RagiumChemicalRecipeProvider(packOutput: PackOutput, future: CompletableFu } result { +Items.STICKY_PISTON } }.save(exporter) - + // Cement + Water -> Mortar RagiumRecipeBuilders.bathing { itemIngredient { items { +RagiumItems.CEMENT } } @@ -45,5 +50,97 @@ class RagiumChemicalRecipeProvider(packOutput: PackOutput, future: CompletableFu }.save(exporter) } + private fun washing() { + // Sand + Water -> SiO2 + Borax + RagiumRecipeBuilders.washing { + itemIngredient { + +holderSet(Tags.Items.SANDS_COLORLESS) + count = 4 + } + fluidIngredient { +waterSet() } + result { + +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Gem.QUARTZ) + count = 3 + } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.BORAX) } + recipeId suffix "_from_sands" + }.save(exporter) + // Red Sand + Water -> SiO2 + Bauxite + RagiumRecipeBuilders.washing { + itemIngredient { + +holderSet(Tags.Items.SANDS_RED) + count = 4 + } + fluidIngredient { +waterSet() } + result { + +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Gem.QUARTZ) + count = 3 + } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.BAUXITE) } + recipeId suffix "_from_red_sands" + }.save(exporter) + // Blue Ice + HF (aq) -> Packed Ice + Cryolite + RagiumRecipeBuilders.washing { + itemIngredient { items { +Items.BLUE_ICE } } + fluidIngredient { +holderSet(RagiumFluids.HYDROFLUORIC_ACID) } + result { + +Items.PACKED_ICE + count = 6 + } + result { +RagiumItems.getOrThrow(HTItemPart.GEM, RagiumMaterial.Gem.CRYOLITE) } + }.save(exporter) + + // Ancient Debris -> Netherite Scrap + RagiumRecipeBuilders.washing { + itemIngredient { items { +Items.ANCIENT_DEBRIS } } + fluidIngredient { + +holderSet(RagiumFluids.HYDROFLUORIC_ACID) + amount /= 4 + } + result { + +Items.NETHERITE_SCRAP + count = 3 + } + recipeId suffix "_from_debris" + }.save(exporter) + // Raw XX -> XX Dust + RagiumRecipeBuilders.washing { + itemIngredient { +holderSet(CommonTagPrefixes.RAW_MATERIALS, RagiumMaterial.Metal.COPPER) } + fluidIngredient { + +holderSet(RagiumFluids.SULFURIC_ACID) + amount /= 4 + } + result { + +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Metal.COPPER) + count = 3 + } + recipeId suffix "_from_raw" + }.save(exporter) + RagiumRecipeBuilders.washing { + itemIngredient { +holderSet(CommonTagPrefixes.RAW_MATERIALS, RagiumMaterial.Metal.IRON) } + fluidIngredient { + +holderSet(RagiumFluids.SULFURIC_ACID) + amount /= 4 + } + result { + +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Metal.IRON) + count = 2 + } + recipeId suffix "_from_raw" + }.save(exporter) + RagiumRecipeBuilders.washing { + itemIngredient { +holderSet(CommonTagPrefixes.RAW_MATERIALS, RagiumMaterial.Metal.GOLD) } + fluidIngredient { + +holderSet(RagiumFluids.NITRIC_ACID) + amount /= 4 + } + result { + +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Metal.GOLD) + count = 2 + } + recipeId suffix "_from_raw" + }.save(exporter) + } + override fun getName(): String = "Chemical Recipes" } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index 7419a5019..89adb2105 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -450,6 +450,8 @@ 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 { @@ -460,39 +462,6 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable } }.save(exporter) } - // Sandstone -> 4x Sand + Niter - RagiumRecipeBuilders.crushing { - ingredient { +holderSet(Tags.Items.SANDSTONE_UNCOLORED_BLOCKS) } - result { - +Items.SAND - count = 4 - } - result { - +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.NITER) - } - }.save(exporter) - // Red Sandstone -> 4x Red Sand + Bauxite - RagiumRecipeBuilders.crushing { - ingredient { +holderSet(Tags.Items.SANDSTONE_RED_BLOCKS) } - result { - +Items.RED_SAND - count = 4 - } - result { - +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.BAUXITE) - } - }.save(exporter) - // Blue Ice -> 9x Packed Ice + Cryolite - RagiumRecipeBuilders.crushing { - ingredient { items { +Items.BLUE_ICE } } - result { - +Items.PACKED_ICE - count = 9 - } - result { - +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Gem.CRYOLITE) - } - }.save(exporter) // Book -> 3x Paper Pulp RagiumRecipeBuilders.crushing { diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index 189c18db1..fe69d2f00 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -73,7 +73,7 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu 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(Tags.Items.SLIME_BALLS) + builder(HTCommonTags.Items.STICKY_BALLS) .addTag(Tags.Items.SLIME_BALLS) .add(RagiumItems.STICKY_BALL) diff --git a/src/generated/resources/assets/ragium/items/ore_slurry_bucket.json b/src/generated/resources/assets/ragium/items/ore_slurry_bucket.json deleted file mode 100644 index 2ba314b92..000000000 --- a/src/generated/resources/assets/ragium/items/ore_slurry_bucket.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "model": { - "type": "neoforge:fluid_container", - "apply_fluid_luminosity": false, - "fluid": "ragium:ore_slurry", - "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 a1b976777..05e991776 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -92,7 +92,6 @@ "block.ragium.nitrogen": "Nitrogen", "block.ragium.ominous_flux": "Ominous Flux", "block.ragium.orange_dye": "Orange Dye", - "block.ragium.ore_slurry": "Invalid Ore Slurry", "block.ragium.oxygen": "Oxygen", "block.ragium.pink_dye": "Pink Dye", "block.ragium.pitch_coke_block": "Block of Pitch Coke", @@ -281,7 +280,6 @@ "item.ragium.obsidian_dust": "Obsidian Dust", "item.ragium.ominous_flux_bucket": "Ominous Flux Bucket", "item.ragium.orange_dye_bucket": "Orange Dye Bucket", - "item.ragium.ore_slurry_bucket": "%1$s Bucket", "item.ragium.oxygen_bucket": "Oxygen Bucket", "item.ragium.paper_dust": "Paper Pulp", "item.ragium.particle_board": "Particle Board", @@ -376,10 +374,6 @@ "ragium.element.ragium.silicon": "Silicon", "ragium.element.ragium.sodium": "Sodium", "ragium.element.ragium.sulfur": "Sulfur", - "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", @@ -400,6 +394,7 @@ "recipe_type.ragium.reacting": "Chemical Reacting", "recipe_type.ragium.refining": "Refining", "recipe_type.ragium.resource.extracting": "Resource Extracting", + "recipe_type.ragium.washing": "Washing", "tag.fluid.c.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 3dabc55b3..ef204c5a6 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -92,7 +92,6 @@ "block.ragium.nitrogen": "窒素", "block.ragium.ominous_flux": "不吉な流動体", "block.ragium.orange_dye": "橙色の染料", - "block.ragium.ore_slurry": "無効な鉱石泥", "block.ragium.oxygen": "酸素", "block.ragium.pink_dye": "桃色の染料", "block.ragium.pitch_coke_block": "ピッチコークスブロック", @@ -281,7 +280,6 @@ "item.ragium.obsidian_dust": "黒曜石の粉", "item.ragium.ominous_flux_bucket": "不吉な流動体入りバケツ", "item.ragium.orange_dye_bucket": "橙色の染料入りバケツ", - "item.ragium.ore_slurry_bucket": "%1$s入りバケツ", "item.ragium.oxygen_bucket": "酸素入りバケツ", "item.ragium.paper_dust": "紙パルプ", "item.ragium.particle_board": "パーティクルボード", @@ -376,10 +374,6 @@ "ragium.element.ragium.silicon": "ケイ素", "ragium.element.ragium.sodium": "ナトリウム", "ragium.element.ragium.sulfur": "硫黄", - "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": "化学洗浄", @@ -400,6 +394,7 @@ "recipe_type.ragium.reacting": "化学反応", "recipe_type.ragium.refining": "蒸留", "recipe_type.ragium.resource.extracting": "資源採集", + "recipe_type.ragium.washing": "洗浄", "tag.fluid.c.alumina_solution": "アルミナ水溶液", "tag.fluid.c.anti_rust_oil": "防錆油", "tag.fluid.c.aromatic_compound": "芳香族化合物", diff --git a/src/generated/resources/data/c/tags/fluid/ore_slurry.json b/src/generated/resources/data/c/tags/fluid/ore_slurry.json deleted file mode 100644 index 146623480..000000000 --- a/src/generated/resources/data/c/tags/fluid/ore_slurry.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:ore_slurry" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets.json b/src/generated/resources/data/c/tags/item/buckets.json index 70f248161..d2f068b5f 100644 --- a/src/generated/resources/data/c/tags/item/buckets.json +++ b/src/generated/resources/data/c/tags/item/buckets.json @@ -41,7 +41,6 @@ "#c:buckets/nitric_acid", "#c:buckets/nitrogen", "#c:buckets/ominous_flux", - "#c:buckets/ore_slurry", "#c:buckets/oxygen", "#c:buckets/potion", "#c:buckets/resin", diff --git a/src/generated/resources/data/c/tags/item/buckets/ore_slurry.json b/src/generated/resources/data/c/tags/item/buckets/ore_slurry.json deleted file mode 100644 index 588595b60..000000000 --- a/src/generated/resources/data/c/tags/item/buckets/ore_slurry.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:ore_slurry_bucket" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/ore_slurry_data/copper.json b/src/generated/resources/data/ragium/ragium/ore_slurry_data/copper.json deleted file mode 100644 index b26e843e0..000000000 --- a/src/generated/resources/data/ragium/ragium/ore_slurry_data/copper.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "color": "#c15a36", - "result": { - "type": "ragium:with_fallback", - "base": { - "type": "ragium:tag", - "tag": "#c:dusts/copper" - }, - "count": 3, - "fallback": { - "id": "ragium:copper_dust" - } - }, - "title": { - "translate": "ragium.ore_slurry_data.ragium.copper" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/ore_slurry_data/gold.json b/src/generated/resources/data/ragium/ragium/ore_slurry_data/gold.json deleted file mode 100644 index 02ef20bc8..000000000 --- a/src/generated/resources/data/ragium/ragium/ore_slurry_data/gold.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "color": "#ffcc00", - "result": { - "type": "ragium:with_fallback", - "base": { - "type": "ragium:tag", - "tag": "#c:dusts/gold" - }, - "count": 2, - "fallback": { - "id": "ragium:gold_dust" - } - }, - "title": { - "translate": "ragium.ore_slurry_data.ragium.gold" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/ore_slurry_data/iron.json b/src/generated/resources/data/ragium/ragium/ore_slurry_data/iron.json deleted file mode 100644 index de10c1c78..000000000 --- a/src/generated/resources/data/ragium/ragium/ore_slurry_data/iron.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "color": "#777777", - "result": { - "type": "ragium:with_fallback", - "base": { - "type": "ragium:tag", - "tag": "#c:dusts/iron" - }, - "count": 2, - "fallback": { - "id": "ragium:iron_dust" - } - }, - "title": { - "translate": "ragium.ore_slurry_data.ragium.iron" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/ore_slurry_data/netherite_scrap.json b/src/generated/resources/data/ragium/ragium/ore_slurry_data/netherite_scrap.json deleted file mode 100644 index d656b3144..000000000 --- a/src/generated/resources/data/ragium/ragium/ore_slurry_data/netherite_scrap.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "color": "#473e3f", - "result": { - "count": 2, - "id": "minecraft:netherite_scrap" - }, - "title": { - "translate": "ragium.ore_slurry_data.ragium.netherite_scrap" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/sticky_piston.json b/src/generated/resources/data/ragium/recipe/bathing/sticky_piston.json new file mode 100644 index 000000000..14e0f73f0 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/sticky_piston.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#ragium:resins" + }, + "item_ingredient": { + "count": 1, + "items": "minecraft:piston" + }, + "result": { + "count": 1, + "id": "minecraft:sticky_piston" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/packed_ice.json b/src/generated/resources/data/ragium/recipe/crushing/packed_ice.json deleted file mode 100644 index bb8899831..000000000 --- a/src/generated/resources/data/ragium/recipe/crushing/packed_ice.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "ragium:crushing", - "ingredient": { - "count": 1, - "items": "minecraft:blue_ice" - }, - "results": [ - { - "count": 9, - "id": "minecraft:packed_ice" - }, - { - "count": 1, - "id": "ragium:cryolite_dust" - } - ], - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/red_sand.json b/src/generated/resources/data/ragium/recipe/crushing/red_sand.json index e775c5741..fa5904c68 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/red_sand.json +++ b/src/generated/resources/data/ragium/recipe/crushing/red_sand.json @@ -4,15 +4,9 @@ "count": 1, "items": "#c:sandstone/red_blocks" }, - "results": [ - { - "count": 4, - "id": "minecraft:red_sand" - }, - { - "count": 1, - "id": "ragium:bauxite_dust" - } - ], + "result": { + "count": 4, + "id": "minecraft:red_sand" + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/sand.json b/src/generated/resources/data/ragium/recipe/crushing/sand.json index 82c9ef9e6..74b20e6ea 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/sand.json +++ b/src/generated/resources/data/ragium/recipe/crushing/sand.json @@ -4,15 +4,9 @@ "count": 1, "items": "#c:sandstone/uncolored_blocks" }, - "results": [ - { - "count": 4, - "id": "minecraft:sand" - }, - { - "count": 1, - "id": "ragium:niter_dust" - } - ], + "result": { + "count": 4, + "id": "minecraft:sand" + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/washing/copper_dust_from_raw.json b/src/generated/resources/data/ragium/recipe/washing/copper_dust_from_raw.json new file mode 100644 index 000000000..edbb155e2 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/copper_dust_from_raw.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:sulfuric_acid" + }, + "item_ingredient": { + "count": 1, + "items": "#c:raw_materials/copper" + }, + "result": { + "count": 3, + "id": "ragium:copper_dust" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/washing/gold_dust_from_raw.json b/src/generated/resources/data/ragium/recipe/washing/gold_dust_from_raw.json new file mode 100644 index 000000000..728d1f14b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/gold_dust_from_raw.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:nitric_acid" + }, + "item_ingredient": { + "count": 1, + "items": "#c:raw_materials/gold" + }, + "result": { + "count": 2, + "id": "ragium:gold_dust" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/washing/iron_dust_from_raw.json b/src/generated/resources/data/ragium/recipe/washing/iron_dust_from_raw.json new file mode 100644 index 000000000..ff9a3337c --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/iron_dust_from_raw.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:sulfuric_acid" + }, + "item_ingredient": { + "count": 1, + "items": "#c:raw_materials/iron" + }, + "result": { + "count": 2, + "id": "ragium:iron_dust" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/washing/netherite_scrap_from_debris.json b/src/generated/resources/data/ragium/recipe/washing/netherite_scrap_from_debris.json new file mode 100644 index 000000000..efc2d1ba4 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/netherite_scrap_from_debris.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:hydrofluoric_acid" + }, + "item_ingredient": { + "count": 1, + "items": "minecraft:ancient_debris" + }, + "result": { + "count": 3, + "id": "minecraft:netherite_scrap" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/washing/packed_ice.json b/src/generated/resources/data/ragium/recipe/washing/packed_ice.json new file mode 100644 index 000000000..582d0174f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/packed_ice.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 1000, + "fluids": "#c:hydrofluoric_acid" + }, + "item_ingredient": { + "count": 1, + "items": "minecraft:blue_ice" + }, + "results": [ + { + "count": 6, + "id": "minecraft:packed_ice" + }, + { + "count": 1, + "id": "ragium:cryolite" + } + ], + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_red_sands.json b/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_red_sands.json new file mode 100644 index 000000000..654c22b8a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_red_sands.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 1000, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 4, + "items": "#c:sands/red" + }, + "results": [ + { + "count": 3, + "id": "ragium:quartz_dust" + }, + { + "count": 1, + "id": "ragium:bauxite_dust" + } + ], + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_sands.json b/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_sands.json new file mode 100644 index 000000000..ff7b409dc --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_sands.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 1000, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 4, + "items": "#c:sands/colorless" + }, + "results": [ + { + "count": 3, + "id": "ragium:quartz_dust" + }, + { + "count": 1, + "id": "ragium:borax_dust" + } + ], + "time": 200 +} \ No newline at end of file diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt index e46db7e7d..5fb24a418 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt @@ -44,7 +44,7 @@ interface HTItemToDoubleItemRecipe : */ open class Basic( val ingredient: HTItemIngredient, - val result: Nel, + val results: Nel, override val progressData: HTProgressData ) : HTItemToDoubleItemRecipe, HTProgressRecipe.Simple { @@ -56,7 +56,7 @@ interface HTItemToDoubleItemRecipe : HTItemIngredient.CODEC.fieldOf(HTConstants.INGREDIENT).forGetter(Basic::ingredient), HTItemResult.CODEC .compactNelFieldOf(HTConstants.RESULT, HTConstants.RESULTS, 2) - .forGetter(Basic::result), + .forGetter(Basic::results), HTProgressData.CODEC.forGetter(Basic::progressData) ).apply(instance, factory::create) } @@ -71,7 +71,7 @@ interface HTItemToDoubleItemRecipe : HTItemIngredient.STREAM_CODEC, Basic::ingredient, HTItemResult.STREAM_CODEC.nelOf(), - Basic::result, + Basic::results, HTProgressData.STREAM_CODEC, Basic::progressData, factory::create @@ -83,6 +83,6 @@ interface HTItemToDoubleItemRecipe : override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) override fun apply(input: ItemInstance): Pair = - result.head.create() to result.getOrNull(1).createOrEmpty() + results.head.create() to results.getOrNull(1).createOrEmpty() } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt index c08a4cadf..f094c6351 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt @@ -27,6 +27,7 @@ data object RagiumConstants { const val CHEMICAL_BATH = "chemical_bath" const val CHEMICAL_REACTOR = "chemical_reactor" const val MIXER = "mixer" + const val WASHER = "washer" // Bio const val BREWERY = "brewery" @@ -64,6 +65,7 @@ data object RagiumConstants { const val CENTRIFUGING = "centrifuging" const val MIXING = "mixing" const val REACTING = "reacting" + const val WASHING = "washing" // Bio const val BREWING = "brewing" diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt index 2b41d14c0..ff557a823 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt @@ -8,7 +8,6 @@ import hiiragi283.lib.recipe.result.HTItemResultType import hiiragi283.lib.resource.toId import hiiragi283.ragium.api.data.chemical.HTChemical import hiiragi283.ragium.api.data.element.HTElement -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryData import net.minecraft.core.Registry import net.minecraft.resources.ResourceKey import net.neoforged.bus.api.SubscribeEvent @@ -63,11 +62,6 @@ data object RagiumRegistries { HTElement.DIRECT_CODEC, HTElement.DIRECT_CODEC ) - event.dataPackRegistry( - Keys.ORE_SLURRY_DATA, - HTOreSlurryData.DIRECT_CODEC, - HTOreSlurryData.DIRECT_CODEC - ) } @JvmStatic @@ -113,12 +107,6 @@ data object RagiumRegistries { @JvmField val ELEMENT: ResourceKey> = createKey(HTConstants.ELEMENT) - /** - * @since 26.1.5 - */ - @JvmField - val ORE_SLURRY_DATA: ResourceKey> = createKey("ore_slurry_data") - @JvmStatic private fun createKey(path: String): ResourceKey> = ResourceKey.createRegistryKey(RagiumAPI.MOD_ID.toId(path)) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt index 74b1aef61..02c84c37c 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt @@ -4,7 +4,6 @@ import hiiragi283.lib.data.DataComponentType import hiiragi283.lib.serialization.codec.HTCodecs import hiiragi283.lib.serialization.network.HTStreamCodecs import hiiragi283.ragium.api.data.chemical.HTChemical -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryData import net.minecraft.core.Holder import net.minecraft.core.component.DataComponentType import net.minecraft.network.codec.ByteBufCodecs @@ -38,13 +37,6 @@ data object RagiumDataComponents { ItemStackTemplate.STREAM_CODEC ) - /** - * @since 26.1.5 - */ - @JvmField - val ORE_SLURRY_DATA: DataComponentType> = - DataComponentType(HTOreSlurryData.CODEC, HTOreSlurryData.STREAM_CODEC) - /** * @since 26.1.7 */ diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt deleted file mode 100644 index 844915d74..000000000 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt +++ /dev/null @@ -1,50 +0,0 @@ -package hiiragi283.ragium.api.data.oreSlurry - -import com.mojang.serialization.Codec -import hiiragi283.lib.HTConstants -import hiiragi283.lib.recipe.result.HTItemResult -import hiiragi283.lib.serialization.codec.HTCodecs -import hiiragi283.lib.serialization.network.HTStreamCodecs -import hiiragi283.lib.text.Text -import hiiragi283.ragium.api.RagiumRegistries -import net.minecraft.core.Holder -import net.minecraft.network.RegistryFriendlyByteBuf -import net.minecraft.network.codec.ByteBufCodecs -import net.minecraft.network.codec.StreamCodec -import net.minecraft.util.ExtraCodecs - -/** - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ -@JvmRecord -data class HTOreSlurryData(val title: Text, val color: Int, val result: HTItemResult) { - companion object { - @JvmField - val DIRECT_CODEC: Codec = HTCodecs.record { instance -> - instance.group( - HTCodecs.TEXT.fieldOf("title").forGetter(HTOreSlurryData::title), - ExtraCodecs.STRING_RGB_COLOR.fieldOf("color").forGetter(HTOreSlurryData::color), - HTItemResult.CODEC.fieldOf(HTConstants.RESULT).forGetter(HTOreSlurryData::result) - ).apply(instance, ::HTOreSlurryData) - } - - @JvmField - val CODEC: Codec> = HTCodecs.holder(RagiumRegistries.Keys.ORE_SLURRY_DATA, DIRECT_CODEC) - - @JvmField - val DIRECT_STREAM_CODEC: StreamCodec = StreamCodec.composite( - HTStreamCodecs.TEXT, - HTOreSlurryData::title, - ByteBufCodecs.VAR_INT, - HTOreSlurryData::color, - HTItemResult.STREAM_CODEC, - HTOreSlurryData::result, - ::HTOreSlurryData - ) - - @JvmField - val STREAM_CODEC: StreamCodec> = - HTStreamCodecs.holder(RagiumRegistries.Keys.ORE_SLURRY_DATA, DIRECT_STREAM_CODEC) - } -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryDataHelper.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryDataHelper.kt deleted file mode 100644 index 3d31d0f9f..000000000 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryDataHelper.kt +++ /dev/null @@ -1,49 +0,0 @@ -package hiiragi283.ragium.api.data.oreSlurry - -import hiiragi283.lib.data.buildDataPatch -import hiiragi283.lib.text.Text -import hiiragi283.ragium.api.data.RagiumDataComponents -import net.minecraft.core.Holder -import net.minecraft.core.component.DataComponentGetter -import net.minecraft.core.component.DataComponentPatch -import net.minecraft.world.item.ItemStack -import net.neoforged.neoforge.fluids.FluidStack -import net.neoforged.neoforge.fluids.FluidType - -/** - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ -data object HTOreSlurryDataHelper { - @JvmStatic - fun getHolder(getter: DataComponentGetter): Holder? = - getter.get(RagiumDataComponents.ORE_SLURRY_DATA) - - @JvmStatic - fun getData(getter: DataComponentGetter): HTOreSlurryData? = getHolder(getter)?.value() - - @JvmStatic - fun getTitle(getter: DataComponentGetter): Text? = getData(getter)?.title - - @JvmStatic - fun createPatch(holder: Holder): DataComponentPatch = - buildDataPatch { set(RagiumDataComponents.ORE_SLURRY_DATA, holder) } - - @JvmStatic - fun copyToPatch(getter: DataComponentGetter): DataComponentPatch? = getHolder(getter)?.let(::createPatch) - - @JvmStatic - fun createFluid(holder: Holder, amount: Int = FluidType.BUCKET_VOLUME): FluidStack = - HTOreSlurryFluidAccess.INSTANCE.fluidContent.toStack(amount, createPatch(holder)) - - @JvmStatic - fun createFluid(getter: DataComponentGetter, amount: Int = FluidType.BUCKET_VOLUME): FluidStack? = - getHolder(getter)?.let { createFluid(it, amount) } - - @JvmStatic - fun createBucket(holder: Holder): ItemStack = - HTOreSlurryFluidAccess.INSTANCE.fluidContent.bucketHolder.toStack(patch = createPatch(holder)) - - @JvmStatic - fun createBucket(getter: DataComponentGetter): ItemStack? = getHolder(getter)?.let(::createBucket) -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryFluidAccess.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryFluidAccess.kt deleted file mode 100644 index 85ec3ac7c..000000000 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryFluidAccess.kt +++ /dev/null @@ -1,20 +0,0 @@ -package hiiragi283.ragium.api.data.oreSlurry - -import hiiragi283.lib.registry.HTFluidContent -import hiiragi283.ragium.api.RagiumAPI - -/** - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ -interface HTOreSlurryFluidAccess { - companion object { - @JvmField - val INSTANCE: HTOreSlurryFluidAccess = RagiumAPI.getService() - } - - /** - * Ragiumで登録される鉱石泥のインスタンス - */ - val fluidContent: HTFluidContent -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt deleted file mode 100644 index 90c231191..000000000 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt +++ /dev/null @@ -1,78 +0,0 @@ -package hiiragi283.ragium.api.data.oreSlurry - -import hiiragi283.lib.recipe.result.HTItemResult -import hiiragi283.lib.registry.HTSimpleDeferredItem -import hiiragi283.lib.registry.createKey -import hiiragi283.lib.resource.toLanguageKey -import hiiragi283.lib.text.translatableText -import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.RagiumRegistries -import hiiragi283.ragium.api.material.HTItemPart -import hiiragi283.ragium.api.material.RagiumMaterial -import net.minecraft.core.HolderGetter -import net.minecraft.core.registries.Registries -import net.minecraft.data.worldgen.BootstrapContext -import net.minecraft.resources.ResourceKey -import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStackTemplate -import net.minecraft.world.item.Items - -data object RagiumOreSlurryData { - @JvmField - val COPPER: ResourceKey = create("copper") - - @JvmField - val IRON: ResourceKey = create("iron") - - @JvmField - val GOLD: ResourceKey = create("gold") - - /** - * @since 26.1.7 - */ - @JvmField - val NETHERITE_SCRAP: ResourceKey = create("netherite_scrap") - - @JvmStatic - private fun create(name: String): ResourceKey = - RagiumRegistries.Keys.ORE_SLURRY_DATA.createKey(RagiumAPI.id(name)) - - @JvmStatic - fun bootstrap(context: BootstrapContext) { - val getter: HolderGetter = context.lookup(Registries.ITEM) - - fun register(key: ResourceKey, color: Int, result: HTItemResult) { - context.register( - key, - HTOreSlurryData(translatableText(key.toLanguageKey()), color, result) - ) - } - - fun register( - key: ResourceKey, - color: Int, - part: HTItemPart, - material: RagiumMaterial, - count: Int = 1 - ) { - val tagEntry = HTItemResult.TagEntry(getter.getOrThrow(part.tagPrefix.itemTagKey(material))) - val fallback = HTSimpleDeferredItem(RagiumAPI.id(part.createName(material))) - val entry: HTItemResult.Entry = if (fallback.isBound) { - HTItemResult.WithFallbackEntry(tagEntry, HTItemResult.SimpleEntry(fallback)) - } else { - tagEntry - } - register( - key, - color, - entry.toResult(count) - ) - } - - register(COPPER, 0xc15a36, HTItemPart.DUST, RagiumMaterial.Metal.COPPER, 3) - register(IRON, 0x777777, HTItemPart.DUST, RagiumMaterial.Metal.IRON, 2) - register(GOLD, 0xffcc00, HTItemPart.DUST, RagiumMaterial.Metal.GOLD, 2) - - register(NETHERITE_SCRAP, 0x473e3f, HTItemResult(ItemStackTemplate(Items.NETHERITE_SCRAP, 2))) - } -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTWashingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTWashingRecipeBuilder.kt new file mode 100644 index 000000000..b0678578d --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTWashingRecipeBuilder.kt @@ -0,0 +1,64 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.ragium.api.data.recipe.builder + +import hiiragi283.lib.collection.toNel +import hiiragi283.lib.data.recipe.builder.HTProgressRecipeBuilder +import hiiragi283.lib.data.recipe.ingredient.HTFluidIngredientBuilder +import hiiragi283.lib.data.recipe.ingredient.HTItemIngredientBuilder +import hiiragi283.lib.data.recipe.result.HTItemResultBuilder +import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.result.HTItemResult +import hiiragi283.lib.util.HTDelegates +import hiiragi283.ragium.api.RagiumConstants +import hiiragi283.ragium.api.recipe.RTWashingRecipe +import it.unimi.dsi.fastutil.objects.ObjectArrayList +import net.minecraft.resources.Identifier +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +class RTWashingRecipeBuilder : HTProgressRecipeBuilder(RagiumConstants.WASHING) { + override fun getRecipeId(): Identifier? = results.first().getId() + + override fun createRecipe(): RTWashingRecipe = + RTWashingRecipe(itemIngredient, fluidIngredient, results.toNel(), progressData) + + // Ingredient + var itemIngredient: HTItemIngredient by HTDelegates.onceInitialize() + + var fluidIngredient: HTFluidIngredient by HTDelegates.onceInitialize() + + operator fun HTItemIngredient.unaryPlus() { + itemIngredient = this + } + + operator fun HTFluidIngredient.unaryPlus() { + fluidIngredient = this + } + + inline fun itemIngredient(builderAction: HTItemIngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTItemIngredientBuilder.build(builderAction) + } + + inline fun fluidIngredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTFluidIngredientBuilder.build(builderAction) + } + + // Result + @PublishedApi internal val results: MutableList = ObjectArrayList() + + inline fun result(builderAction: HTItemResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + results += HTItemResultBuilder.build(builderAction) + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt index d44734c42..63e983c21 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 @@ -188,6 +188,14 @@ data object RagiumRecipeBuilders { return RTReactingRecipeBuilder().apply(builderAction) } + @JvmStatic + inline fun washing(builderAction: RTWashingRecipeBuilder.() -> Unit): RTWashingRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return RTWashingRecipeBuilder().apply(builderAction) + } + // Bio @JvmStatic inline fun brewing( diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt new file mode 100644 index 000000000..30e0d2609 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt @@ -0,0 +1,81 @@ +package hiiragi283.ragium.api.recipe + +import com.mojang.serialization.MapCodec +import hiiragi283.lib.HTConstants +import hiiragi283.lib.collection.Nel +import hiiragi283.lib.recipe.HTRecipeType +import hiiragi283.lib.recipe.HTSerializableRecipe +import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe +import hiiragi283.lib.recipe.base.HTProgressData +import hiiragi283.lib.recipe.base.HTProgressRecipe +import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.result.HTItemResult +import hiiragi283.lib.recipe.result.createOrEmpty +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.codec.compactNelFieldOf +import hiiragi283.lib.serialization.network.nelOf +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.StreamCodec +import net.minecraft.world.item.ItemInstance +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.crafting.RecipeSerializer +import net.neoforged.neoforge.fluids.FluidInstance + +@JvmRecord +data class RTWashingRecipe( + val itemIngredient: HTItemIngredient, + val fluidIngredient: HTFluidIngredient, + val results: Nel, + override val progressData: HTProgressData +) : HTItemAndFluidToRecipe>, + HTProgressRecipe.Simple, + HTSerializableRecipe { + companion object { + @JvmField + val CODEC: MapCodec = HTCodecs.recordMap { instance -> + instance.group( + HTItemIngredient.CODEC + .fieldOf(HTConstants.ITEM_INGREDIENT) + .forGetter(RTWashingRecipe::itemIngredient), + HTFluidIngredient.CODEC + .fieldOf(HTConstants.FLUID_INGREDIENT) + .forGetter(RTWashingRecipe::fluidIngredient), + HTItemResult.CODEC + .compactNelFieldOf(HTConstants.RESULT, HTConstants.RESULTS, 2) + .forGetter(RTWashingRecipe::results), + HTProgressData.CODEC.forGetter(RTWashingRecipe::progressData) + ).apply(instance, ::RTWashingRecipe) + } + + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + HTItemIngredient.STREAM_CODEC, + RTWashingRecipe::itemIngredient, + HTFluidIngredient.STREAM_CODEC, + RTWashingRecipe::fluidIngredient, + HTItemResult.STREAM_CODEC.nelOf(), + RTWashingRecipe::results, + HTProgressData.STREAM_CODEC, + RTWashingRecipe::progressData, + ::RTWashingRecipe + ) + + @JvmField + val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) + } + + override fun test(first: ItemInstance, second: FluidInstance): Boolean = + itemIngredient.test(first) && fluidIngredient.test(second) + + override fun apply(first: ItemInstance, second: FluidInstance): Pair = + results.head.create() to results.getOrNull(1).createOrEmpty() + + override fun getMatchingStack(first: ItemInstance, second: FluidInstance): Pair = + itemIngredient.getMatchingStack(first) to fluidIngredient.getMatchingStack(second) + + override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.WASHING + + override fun getType(): HTRecipeType = RagiumRecipeTypes.WASHING +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt index 69c95d1c7..5ae523a5a 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt @@ -80,6 +80,9 @@ data object RagiumRecipeLookups { @JvmField val REACTING: HTCompoundRecipeLookup = create(RagiumConstants.REACTING) + @JvmField + val WASHING: HTRecipeLookup = create(RagiumRecipeTypes.WASHING) + // Bio @JvmField val BREWING: HTCompoundRecipeLookup = create(RagiumConstants.BREWING) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt index e79023fa6..6e7fdccce 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt @@ -99,6 +99,10 @@ data object RagiumRecipeSerializers { val REACTING: RecipeSerializer = register(RagiumConstants.REACTING, RTReactingRecipe.Basic.SERIALIZER) + @JvmField + val WASHING: RecipeSerializer = + register(RagiumConstants.WASHING, RTWashingRecipe.SERIALIZER) + // Bio @JvmField val BREWING: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index ec771be79..3a3f03ef8 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -76,6 +76,9 @@ data object RagiumRecipeTypes { @JvmField val REACTING: HTRecipeType = create(RagiumConstants.REACTING) + @JvmField + val WASHING: HTRecipeType = create(RagiumConstants.WASHING) + // Bio @JvmField val BREWING: HTRecipeType = create(RagiumConstants.BREWING) 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 c77df37a9..297c56d54 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt @@ -24,7 +24,7 @@ class HTItemAndFluidToItemRecipeCategory( recipe: HTItemAndFluidToRecipe.BasicItem, focuses: IFocusGroup ) { - // input + // inputs builder .addInputSlot(getPosition(0), getPosition(0)) .add(recipe.fluidIngredient) diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToDoubleItemRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToDoubleItemRecipeCategory.kt index dfe2070df..8ca08995c 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToDoubleItemRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToDoubleItemRecipeCategory.kt @@ -30,16 +30,16 @@ class HTItemToDoubleItemRecipeCategory( .addInputSlot(getPosition(0), getPosition(0)) .add(recipe.ingredient) .setSlotBackground(HTBackgroundType.INPUT) - // output + // outputs builder .addOutputSlot(getPosition(3), getPosition(0)) - .add(recipe.result.head) + .add(recipe.results.head) .setSlotBackground(HTBackgroundType.OUTPUT) val slot: IRecipeSlotBuilder = builder .addOutputSlot(getPosition(5), getPosition(0)) .setSlotBackground(HTBackgroundType.EXTRA_OUTPUT) - recipe.result.getOrNull(1)?.let(slot::add) + recipe.results.getOrNull(1)?.let(slot::add) } override fun setupRecipeExtras( diff --git a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt index fe2efe0db..a37d0c6c2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt @@ -92,7 +92,6 @@ data object Ragium : HTCommonMod() { helper.register(RagiumAPI.id(HTConstants.ENERGY), RagiumDataComponents.ENERGY) helper.register(RagiumAPI.id(HTConstants.FLUID), RagiumDataComponents.FLUID) helper.register(RagiumAPI.id("memory_disc_data"), RagiumDataComponents.MEMORY_DISC_DATA) - helper.register(RagiumAPI.id("ore_slurry_data"), RagiumDataComponents.ORE_SLURRY_DATA) helper.register(RagiumAPI.id("owner_id"), RagiumDataComponents.OWNER_ID) } event.register(Registries.MENU) { helper -> diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index 2315c110d..0410d3db0 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -25,8 +25,6 @@ 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 @@ -235,13 +233,6 @@ internal data object RagiumCommon { }.build() } } - - RagiumRecipeLookups.MIXING.addRecipes( - RecipeKey(RagiumAPI.id("/${RagiumConstants.MIXING}", "ore_solvation")) to RTOreSolvingRecipe - ) - RagiumRecipeLookups.REACTING.addRecipes( - RecipeKey(RagiumAPI.id("/${RagiumConstants.REACTING}", "ore_slurry_washing")) to RTOreSlurryWashingRecipe - ) } private fun HolderGetter.Provider.getOrNull(content: HTFluidContent): HolderSet? = diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/oreSlurry/RagiumOreSlurryFluidAccess.kt b/src/main/kotlin/hiiragi283/ragium/common/data/oreSlurry/RagiumOreSlurryFluidAccess.kt deleted file mode 100644 index fff47b235..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/data/oreSlurry/RagiumOreSlurryFluidAccess.kt +++ /dev/null @@ -1,9 +0,0 @@ -package hiiragi283.ragium.common.data.oreSlurry - -import hiiragi283.lib.registry.HTFluidContent -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryFluidAccess -import hiiragi283.ragium.common.fluid.RagiumFluids - -class RagiumOreSlurryFluidAccess : HTOreSlurryFluidAccess { - override val fluidContent: HTFluidContent get() = RagiumFluids.ORE_SLURRY -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/HTOreSlurryFluidType.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/HTOreSlurryFluidType.kt deleted file mode 100644 index a37302eb1..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/HTOreSlurryFluidType.kt +++ /dev/null @@ -1,15 +0,0 @@ -package hiiragi283.ragium.common.fluid - -import hiiragi283.lib.fluid.HTFluidType -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper -import net.minecraft.network.chat.Component -import net.minecraft.world.item.ItemStack -import net.neoforged.neoforge.fluids.FluidStack - -class HTOreSlurryFluidType(properties: Properties) : HTFluidType(properties) { - override fun getDescription(stack: FluidStack): Component = - HTOreSlurryDataHelper.getTitle(stack) ?: super.getDescription(stack) - - override fun getBucket(stack: FluidStack): ItemStack = - HTOreSlurryDataHelper.createBucket(stack) ?: super.getBucket(stack) -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt index 389e32422..ffebf83ff 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt @@ -8,7 +8,6 @@ import hiiragi283.lib.resource.toId import hiiragi283.lib.resource.vanillaId import hiiragi283.lib.util.Identity import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.common.item.HTOreSlurryBucketItem import hiiragi283.ragium.common.item.HTPotionBucketItem import hiiragi283.ragium.common.item.component.RagiumConsumables import net.minecraft.core.component.DataComponents @@ -258,12 +257,4 @@ data object RagiumFluids { val CAOH_SOLUTION: HTFluidContent.Flowing = REGISTER.registerFlowing("calcium_hydroxide_solution") { properties = liquid() } - - // Other - @JvmField - val ORE_SLURRY: HTFluidContent.Virtual = REGISTER.registerVirtual("ore_slurry") { - properties = liquid() - typeFactory = ::HTOreSlurryFluidType - bucketFactory = ::HTOreSlurryBucketItem - } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/HTOreSlurryBucketItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/HTOreSlurryBucketItem.kt deleted file mode 100644 index 8f9ae32b4..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/item/HTOreSlurryBucketItem.kt +++ /dev/null @@ -1,51 +0,0 @@ -package hiiragi283.ragium.common.item - -import hiiragi283.lib.item.HTSubCreativeTabContents -import hiiragi283.lib.text.Text -import hiiragi283.lib.text.translatableText -import hiiragi283.ragium.api.RagiumRegistries -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper -import hiiragi283.ragium.common.transfer.item.HTCustomBucketItemHandler -import net.minecraft.core.Holder -import net.minecraft.network.chat.Component -import net.minecraft.world.item.CreativeModeTab -import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack -import net.minecraft.world.level.material.Fluid -import net.neoforged.neoforge.transfer.access.ItemAccess -import net.neoforged.neoforge.transfer.fluid.FluidResource -import net.neoforged.neoforge.transfer.item.ItemResource - -class HTOreSlurryBucketItem(properties: Properties) : - Item(properties), - HTSubCreativeTabContents { - constructor(content: Fluid, properties: Properties) : this(properties) - - override fun getName(itemStack: ItemStack): Component { - val oreSlurryName: Text = HTOreSlurryDataHelper.getTitle(itemStack) ?: return super.getName(itemStack) - return translatableText(super.descriptionId, oreSlurryName) - } - - // HTSubCreativeTabContents // - - override fun addItems( - baseItem: Holder, - parameters: CreativeModeTab.ItemDisplayParameters, - output: CreativeModeTab.Output - ) { - parameters.holders() - .lookupOrThrow(RagiumRegistries.Keys.ORE_SLURRY_DATA) - .listElements() - .map(HTOreSlurryDataHelper::createBucket) - .forEach(output::accept) - } - - override fun shouldAddDefault(): Boolean = false - - // BucketHandler // - - class BucketHandler(itemAccess: ItemAccess) : HTCustomBucketItemHandler(itemAccess) { - override fun getResourceFrom(accessResource: ItemResource, index: Int): FluidResource = - HTOreSlurryDataHelper.createFluid(accessResource)?.let(FluidResource::of) ?: FluidResource.EMPTY - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index d7d2b04a8..fcf7e942c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -12,7 +12,6 @@ import hiiragi283.lib.registry.HTSimpleDeferredItem import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.RagiumDataComponents import hiiragi283.ragium.api.data.chemical.RagiumChemicals -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 @@ -251,11 +250,6 @@ data object RagiumItems { { _, access: ItemAccess -> HTPotionBucketItem.BucketHandler(access) }, RagiumFluids.POTION.bucketHolder ) - event.registerItem( - HTFluidCapabilities.item, - { _, access: ItemAccess -> HTOreSlurryBucketItem.BucketHandler(access) }, - RagiumFluids.ORE_SLURRY.bucketHolder - ) // Item } @@ -297,10 +291,5 @@ data object RagiumItems { setHolder(Items.QUARTZ_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON_DIOXIDE) setHolder(Items.QUARTZ, RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON_DIOXIDE) - // Ore Slurry - setHolder(Items.RAW_COPPER, RagiumDataComponents.ORE_SLURRY_DATA, RagiumOreSlurryData.COPPER) - setHolder(Items.RAW_IRON, RagiumDataComponents.ORE_SLURRY_DATA, RagiumOreSlurryData.IRON) - setHolder(Items.RAW_GOLD, RagiumDataComponents.ORE_SLURRY_DATA, RagiumOreSlurryData.GOLD) - setHolder(Items.ANCIENT_DEBRIS, RagiumDataComponents.ORE_SLURRY_DATA, RagiumOreSlurryData.NETHERITE_SCRAP) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSlurryWashingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSlurryWashingRecipe.kt deleted file mode 100644 index 1efc43127..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSlurryWashingRecipe.kt +++ /dev/null @@ -1,34 +0,0 @@ -package hiiragi283.ragium.common.recipe - -import hiiragi283.lib.recipe.base.HTProgressData -import hiiragi283.lib.recipe.base.HTProgressRecipe -import hiiragi283.lib.recipe.ingredient.HTIngredientHelper -import hiiragi283.lib.recipe.input.HTFluidRecipeInput -import hiiragi283.lib.recipe.result.HTItemAndFluidResult -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper -import hiiragi283.ragium.api.recipe.RTReactingRecipe -import net.neoforged.neoforge.common.Tags -import net.neoforged.neoforge.fluids.FluidInstance -import net.neoforged.neoforge.fluids.FluidType - -data object RTOreSlurryWashingRecipe : - RTReactingRecipe, - HTProgressRecipe.Simple { - override fun test(first: FluidInstance, second: FluidInstance): Boolean { - // Water - if (!second.`is`(Tags.Fluids.WATER) || second.amount() < FluidType.BUCKET_VOLUME) return false - // Ore Slurry - return HTOreSlurryDataHelper.getHolder(first) != null - } - - override fun apply(first: FluidInstance, second: FluidInstance): HTItemAndFluidResult = - HTOreSlurryDataHelper.getData(first)?.result.let(HTItemAndFluidResult.Companion::from) - - override fun getMatchingStack(first: FluidInstance, second: FluidInstance): Pair = - Pair( - HTIngredientHelper.copyWithAmount(first, FluidType.BUCKET_VOLUME), - HTIngredientHelper.copyWithAmount(second, FluidType.BUCKET_VOLUME) - ) - - override val progressData: HTProgressData = HTProgressData.time(200) -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSolvingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSolvingRecipe.kt deleted file mode 100644 index e0de1baa6..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSolvingRecipe.kt +++ /dev/null @@ -1,32 +0,0 @@ -package hiiragi283.ragium.common.recipe - -import hiiragi283.lib.recipe.base.HTItemAndFluidToFluidRecipe -import hiiragi283.lib.recipe.base.HTProgressData -import hiiragi283.lib.recipe.base.HTProgressRecipe -import hiiragi283.lib.recipe.ingredient.HTIngredientHelper -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper -import hiiragi283.ragium.common.fluid.RagiumFluids -import net.minecraft.world.item.ItemInstance -import net.neoforged.neoforge.fluids.FluidInstance -import net.neoforged.neoforge.fluids.FluidStack -import net.neoforged.neoforge.fluids.FluidType - -data object RTOreSolvingRecipe : HTItemAndFluidToFluidRecipe, HTProgressRecipe.Simple { - override fun test(first: ItemInstance, second: FluidInstance): Boolean { - // Sulfuric Acid - if (!second.`is`(RagiumFluids.SULFURIC_ACID.fluidTag) || second.amount() < FluidType.BUCKET_VOLUME) return false - // Ore - return HTOreSlurryDataHelper.getHolder(first) != null - } - - override fun apply(first: ItemInstance, second: FluidInstance): FluidStack = - HTOreSlurryDataHelper.createFluid(first) ?: FluidStack.EMPTY - - override fun getMatchingStack(first: ItemInstance, second: FluidInstance): Pair = Pair( - HTIngredientHelper.copyWithCount(first, 1), - HTIngredientHelper.copyWithAmount(second, FluidType.BUCKET_VOLUME) - ) - - override val progressData: HTProgressData = HTProgressData.time(200) -} diff --git a/src/main/resources/META-INF/services/hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryFluidAccess b/src/main/resources/META-INF/services/hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryFluidAccess deleted file mode 100644 index 9d6970eab..000000000 --- a/src/main/resources/META-INF/services/hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryFluidAccess +++ /dev/null @@ -1 +0,0 @@ -hiiragi283.ragium.common.data.oreSlurry.RagiumOreSlurryFluidAccess