diff --git a/CHANGELOG.md b/CHANGELOG.md index 807a3295..7e72e5ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # 2.5.4 - Fix DraconicEvolution mod OreDictionary [#341](https://github.com/GTModpackTeam/GTExpert-Core/pull/341) +- Fix FreezerRecipes logic [#342](https://github.com/GTModpackTeam/GTExpert-Core/pull/342) * * * diff --git a/dependencies.gradle b/dependencies.gradle index 639ec351..065eb460 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -57,7 +57,7 @@ dependencies { implementation rfg.deobf("curse.maven:nae2-884359:5380800") // NAE2: 1.6.4 implementation rfg.deobf("curse.maven:ae2-fluid-crafting-rework-623955:5751930") // AE2FC: 2.6.6-r - compileOnly "curse.maven:forgelin-continuous-456403:6760510" // Forgelin-Continuous 2.2.0.0 + compileOnly "curse.maven:forgelin-continuous-456403:7182824" // Forgelin-Continuous 2.2.21.0 compileOnly "CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.1.20.700" // CrT 4.1.20.700 compileOnly "curse.maven:ctm-267602:2915363" // CTM 1.0.2.31 runtimeOnly "com.cleanroommc:modularui:2.4.3" // MUI 2.4.3 @@ -129,9 +129,9 @@ dependencies { runtimeOnly rfg.deobf("curse.maven:draconicadditions-314515:3514704") } - // Debug Avaritia: 3.3.0.46-hotfix3 + // Debug Avaritia: 3.3.0.47-hotfix1 if (project.debug_all.toBoolean() || project.debug_avaritia.toBoolean()) { - runtimeOnly rfg.deobf("curse.maven:avaritia-1-1x-unofficial-1165010:6542330") + runtimeOnly rfg.deobf("curse.maven:avaritia-1-1x-unofficial-1165010:7186329") } // Debug Chisel: 1.0.2.45 diff --git a/src/main/java/com/github/gtexpert/core/integration/deda/recipes/DraconicMaterialsRecipe.java b/src/main/java/com/github/gtexpert/core/integration/deda/recipes/DraconicMaterialsRecipe.java index 12429637..5b183123 100644 --- a/src/main/java/com/github/gtexpert/core/integration/deda/recipes/DraconicMaterialsRecipe.java +++ b/src/main/java/com/github/gtexpert/core/integration/deda/recipes/DraconicMaterialsRecipe.java @@ -1,37 +1,24 @@ package com.github.gtexpert.core.integration.deda.recipes; import static gregtech.api.GTValues.*; -import static gregtech.api.unification.material.info.MaterialFlags.*; import static gregtech.api.unification.ore.OrePrefix.*; -import java.util.ArrayList; -import java.util.List; - import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; import com.brandon3055.draconicevolution.DEFeatures; -import gregtech.api.GregTechAPI; import gregtech.api.metatileentity.multiblock.CleanroomType; import gregtech.api.recipes.ModHandler; import gregtech.api.recipes.RecipeBuilder; import gregtech.api.recipes.RecipeMaps; import gregtech.api.unification.OreDictUnifier; -import gregtech.api.unification.material.Material; import gregtech.api.unification.material.Materials; -import gregtech.api.unification.material.properties.BlastProperty; -import gregtech.api.unification.material.properties.PropertyKey; import gregtech.common.ConfigHolder; import gregtech.common.blocks.MetaBlocks; import gregtech.common.items.MetaItems; import gregicality.multiblocks.api.fluids.GCYMFluidStorageKeys; -import gregicality.multiblocks.api.unification.properties.GCYMPropertyKey; import com.github.gtexpert.core.api.GTEValues; import com.github.gtexpert.core.api.unification.material.GTEMaterials; @@ -143,95 +130,6 @@ public static void init() { .output(block, GTEMaterials.AwakenedDraconium, 3) .explosivesType(new ItemStack(MetaBlocks.ITNT)) .buildAndRegister(); - - // Extended recipes - List materials = new ArrayList<>(GregTechAPI.materialManager.getRegisteredMaterials()); - materials.forEach(DraconicMaterialsRecipe::vacuumFreezerExtended); - } - - /** - * Vacuum Freezer to extended recipes - * - * @param material The material to add recipes for - */ - private static void vacuumFreezerExtended(@NotNull Material material) { - // Check if the material has a blast recipe - if (!material.hasProperty(GCYMPropertyKey.ALLOY_BLAST)) return; - - // Check if the material has a molten fluid - Fluid molten = material.getFluid(GCYMFluidStorageKeys.MOLTEN); - if (molten == null) return; - - // Get the vacuum freezer EUt and duration - BlastProperty property = material.getProperty(PropertyKey.BLAST); - int vacuumEUt = property.getVacuumEUtOverride() != -1 ? property.getVacuumEUtOverride() : VA[MV]; - int vacuumDuration = property.getVacuumDurationOverride() != -1 ? property.getVacuumDurationOverride() : - (int) (material.getMass() * 0.5); - - // Check if the material has a blast temperature above 5000K - if (property.getBlastTemperature() >= 5000) { - if (material.hasFlag(GENERATE_PLATE)) { - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .notConsumable(MetaItems.SHAPE_MOLD_PLATE) - .fluidInputs(new FluidStack(molten, 144)) - .fluidInputs(GTEMaterials.Cryotheum.getFluid(250)) - .fluidOutputs(GTEMaterials.Pyrotheum.getFluid(GCYMFluidStorageKeys.MOLTEN, 50)) - .output(plate, material, 1) - .duration(vacuumDuration / 2) - .EUt(vacuumEUt) - .buildAndRegister(); - } - if (material.hasFlag(GENERATE_SMALL_GEAR)) { - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .notConsumable(MetaItems.SHAPE_MOLD_GEAR_SMALL) - .fluidInputs(new FluidStack(molten, 144)) - .fluidInputs(GTEMaterials.Cryotheum.getFluid(250)) - .fluidOutputs(GTEMaterials.Pyrotheum.getFluid(GCYMFluidStorageKeys.MOLTEN, 50)) - .output(gearSmall, material, 1) - .duration(vacuumDuration / 2) - .EUt(vacuumEUt) - .buildAndRegister(); - } - if (material.hasFlag(GENERATE_GEAR)) { - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .notConsumable(MetaItems.SHAPE_MOLD_GEAR) - .fluidInputs(new FluidStack(molten, 576)) - .fluidInputs(GTEMaterials.Cryotheum.getFluid(1000)) - .fluidOutputs(GTEMaterials.Pyrotheum.getFluid(GCYMFluidStorageKeys.MOLTEN, 200)) - .output(gear, material, 1) - .duration(vacuumDuration * 2) - .EUt(vacuumEUt) - .buildAndRegister(); - } - if (material.hasFlag(GENERATE_ROTOR)) { - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .notConsumable(MetaItems.SHAPE_MOLD_ROTOR) - .fluidInputs(new FluidStack(molten, 576)) - .fluidInputs(GTEMaterials.Cryotheum.getFluid(1000)) - .fluidOutputs(GTEMaterials.Pyrotheum.getFluid(GCYMFluidStorageKeys.MOLTEN, 200)) - .output(rotor, material, 1) - .duration(vacuumDuration / 2) - .EUt(vacuumEUt) - .buildAndRegister(); - } - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .input(ingotHot, material, 1) - .fluidInputs(GTEMaterials.Cryotheum.getFluid(250)) - .fluidOutputs(GTEMaterials.Pyrotheum.getFluid(GCYMFluidStorageKeys.MOLTEN, 50)) - .output(ingot, material, 1) - .duration(vacuumDuration / 2) - .EUt(vacuumEUt) - .buildAndRegister(); - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .circuitMeta(1) - .fluidInputs(new FluidStack(molten, 144)) - .fluidInputs(GTEMaterials.Cryotheum.getFluid(250)) - .fluidOutputs(GTEMaterials.Pyrotheum.getFluid(GCYMFluidStorageKeys.MOLTEN, 50)) - .fluidOutputs(material.getFluid(144)) - .duration(vacuumDuration / 2) - .EUt(vacuumEUt) - .buildAndRegister(); - } } public static void remove() { diff --git a/src/main/java/com/github/gtexpert/core/loaders/recipe/CEUOverrideRecipe.java b/src/main/java/com/github/gtexpert/core/loaders/recipe/CEUOverrideRecipe.java index 0acb65c1..da5c7fc8 100644 --- a/src/main/java/com/github/gtexpert/core/loaders/recipe/CEUOverrideRecipe.java +++ b/src/main/java/com/github/gtexpert/core/loaders/recipe/CEUOverrideRecipe.java @@ -1,43 +1,34 @@ package com.github.gtexpert.core.loaders.recipe; import static gregtech.api.GTValues.*; -import static gregtech.api.unification.material.info.MaterialFlags.*; import static gregtech.api.unification.ore.OrePrefix.*; +import static gregtech.common.items.MetaItems.ULTIMATE_BATTERY; +import static gregtech.loaders.recipe.handlers.ToolRecipeHandler.batteryItems; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.EnumDyeColor; import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; -import org.jetbrains.annotations.NotNull; - -import gregtech.api.GregTechAPI; -import gregtech.api.fluids.store.FluidStorageKeys; +import gregtech.api.GTValues; import gregtech.api.items.OreDictNames; +import gregtech.api.items.metaitem.MetaItem; import gregtech.api.recipes.GTRecipeHandler; import gregtech.api.recipes.ModHandler; import gregtech.api.recipes.RecipeMaps; import gregtech.api.recipes.category.RecipeCategories; import gregtech.api.recipes.ingredients.IntCircuitIngredient; import gregtech.api.unification.OreDictUnifier; -import gregtech.api.unification.material.Material; import gregtech.api.unification.material.Materials; -import gregtech.api.unification.material.properties.BlastProperty; -import gregtech.api.unification.material.properties.PropertyKey; -import gregtech.api.unification.ore.OrePrefix; import gregtech.api.unification.stack.UnificationEntry; import gregtech.common.ConfigHolder; import gregtech.common.items.MetaItems; import gregtech.common.metatileentities.MetaTileEntities; -import gregicality.multiblocks.api.fluids.GCYMFluidStorageKeys; -import gregicality.multiblocks.api.unification.properties.GCYMPropertyKey; - import com.github.gtexpert.core.common.items.GTEMetaItems; public class CEUOverrideRecipe { @@ -50,13 +41,6 @@ public static void init() { } private static void materials() { - // Vacuum Freezer - List materials = new ArrayList<>(GregTechAPI.materialManager.getRegisteredMaterials()); - materials.forEach(CEUOverrideRecipe::vacuumFreezerExtended); - - // Remove Gem - materials.forEach(CEUOverrideRecipe::removeGem); - // Iron Nugget ModHandler.addShapelessRecipe("wrought_iron_nugget", OreDictUnifier.get(nugget, Materials.Iron, 9), OreDictUnifier.get(ingot, Materials.Iron, 1)); @@ -241,6 +225,16 @@ private static void items() { .category(RecipeCategories.MACERATOR_RECYCLING) .duration(1470).EUt(2) .buildAndRegister(); + + batteryItems.put(GTValues.UHV, Collections.singletonList(ULTIMATE_BATTERY)); + for (int i = GTValues.ULV; i < GTValues.UEV; i++) { + List tieredBatteryItems = batteryItems.get(i); + for (MetaItem.MetaValueItem batteryItem : tieredBatteryItems) { + ItemStack batteryStack = batteryItem.getStackForm(); + String recipeName = String.format("nbt_clearing_%s", batteryItem.unlocalizedName); + ModHandler.addShapelessNBTClearingRecipe(recipeName, batteryStack, batteryStack); + } + } } private static void blocks() { @@ -367,142 +361,4 @@ private static void tools() { 'P', MetaItems.CARBON_FIBER_PLATE.getStackForm(), 'E', MetaItems.ENERGIUM_CRYSTAL.getStackForm()); } - - /** - * Vacuum Freezer to extended recipes - * - * @param material The material to add recipes for - */ - private static void vacuumFreezerExtended(@NotNull Material material) { - // Check if the material has a blast recipe - if (!material.hasProperty(GCYMPropertyKey.ALLOY_BLAST)) return; - - // Check if the material has a molten fluid - Fluid molten = material.getFluid(GCYMFluidStorageKeys.MOLTEN); - if (molten == null) return; - - // Get the vacuum freezer EUt and duration - BlastProperty property = material.getProperty(PropertyKey.BLAST); - int vacuumEUt = property.getVacuumEUtOverride() != -1 ? property.getVacuumEUtOverride() : VA[MV]; - int vacuumDuration = property.getVacuumDurationOverride() != -1 ? property.getVacuumDurationOverride() : - (int) material.getMass() * 3; - - // Check if the material has a blast temperature above 5000K - if (property.getBlastTemperature() >= 5000) { - if (material.hasFlag(GENERATE_PLATE)) { - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .notConsumable(MetaItems.SHAPE_MOLD_PLATE) - .fluidInputs(new FluidStack(molten, 144)) - .fluidInputs(Materials.Helium.getFluid(FluidStorageKeys.LIQUID, 500)) - .fluidOutputs(Materials.Helium.getFluid(250)) - .output(plate, material, 1) - .duration(vacuumDuration) - .EUt(vacuumEUt) - .buildAndRegister(); - } - if (material.hasFlag(GENERATE_SMALL_GEAR)) { - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .notConsumable(MetaItems.SHAPE_MOLD_GEAR_SMALL) - .fluidInputs(new FluidStack(molten, 144)) - .fluidInputs(Materials.Helium.getFluid(FluidStorageKeys.LIQUID, 500)) - .fluidOutputs(Materials.Helium.getFluid(250)) - .output(gearSmall, material, 1) - .duration(vacuumDuration) - .EUt(vacuumEUt) - .buildAndRegister(); - } - if (material.hasFlag(GENERATE_GEAR)) { - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .notConsumable(MetaItems.SHAPE_MOLD_GEAR) - .fluidInputs(new FluidStack(molten, 576)) - .fluidInputs(Materials.Helium.getFluid(FluidStorageKeys.LIQUID, 2000)) - .fluidOutputs(Materials.Helium.getFluid(1000)) - .output(gear, material, 1) - .duration(vacuumDuration * 4) - .EUt(vacuumEUt) - .buildAndRegister(); - } - if (material.hasFlag(GENERATE_ROTOR)) { - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .notConsumable(MetaItems.SHAPE_MOLD_ROTOR) - .fluidInputs(new FluidStack(molten, 576)) - .fluidInputs(Materials.Helium.getFluid(FluidStorageKeys.LIQUID, 2000)) - .fluidOutputs(Materials.Helium.getFluid(1000)) - .output(rotor, material, 1) - .duration(vacuumDuration * 4) - .EUt(vacuumEUt) - .buildAndRegister(); - } - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .circuitMeta(1) - .fluidInputs(new FluidStack(molten, 144)) - .fluidInputs(Materials.Helium.getFluid(FluidStorageKeys.LIQUID, 500)) - .fluidOutputs(Materials.Helium.getFluid(250)) - .fluidOutputs(material.getFluid(144)) - .duration(vacuumDuration) - .EUt(vacuumEUt) - .buildAndRegister(); - } else { - if (material.hasFlag(GENERATE_PLATE)) { - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .notConsumable(MetaItems.SHAPE_MOLD_PLATE) - .fluidInputs(new FluidStack(molten, 144)) - .output(plate, material, 1) - .duration(vacuumDuration) - .EUt(vacuumEUt) - .buildAndRegister(); - } - if (material.hasFlag(GENERATE_SMALL_GEAR)) { - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .notConsumable(MetaItems.SHAPE_MOLD_GEAR_SMALL) - .fluidInputs(new FluidStack(molten, 144)) - .output(gearSmall, material, 1) - .duration(vacuumDuration) - .EUt(vacuumEUt) - .buildAndRegister(); - } - if (material.hasFlag(GENERATE_GEAR)) { - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .notConsumable(MetaItems.SHAPE_MOLD_GEAR) - .fluidInputs(new FluidStack(molten, 576)) - .output(gear, material, 1) - .duration(vacuumDuration * 4) - .EUt(vacuumEUt) - .buildAndRegister(); - } - if (material.hasFlag(GENERATE_ROTOR)) { - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .notConsumable(MetaItems.SHAPE_MOLD_ROTOR) - .fluidInputs(new FluidStack(molten, 576)) - .output(rotor, material, 1) - .duration(vacuumDuration * 4) - .EUt(vacuumEUt) - .buildAndRegister(); - } - RecipeMaps.VACUUM_RECIPES.recipeBuilder() - .circuitMeta(1) - .fluidInputs(new FluidStack(molten, 144)) - .fluidOutputs(material.getFluid(144)) - .duration(vacuumDuration) - .EUt(vacuumEUt) - .buildAndRegister(); - } - } - - /** - * Remove gem recipes - * - * @param material The material - */ - private static void removeGem(Material material) { - if (!material.hasProperty(PropertyKey.FLUID)) return; - if (!material.hasProperty(PropertyKey.GEM)) return; - if (!ConfigHolder.recipes.disableManualCompression) return; - - long materialAmount = OrePrefix.block.getMaterialAmount(material); - GTRecipeHandler.removeRecipesByInputs(RecipeMaps.FLUID_SOLIDFICATION_RECIPES, - new ItemStack[] { MetaItems.SHAPE_MOLD_BLOCK.getStackForm() }, - new FluidStack[] { - material.getProperty(PropertyKey.FLUID).solidifiesFrom(((int) (materialAmount * L / M))) }); - } } diff --git a/src/main/java/com/github/gtexpert/core/loaders/recipe/GTERecipe.java b/src/main/java/com/github/gtexpert/core/loaders/recipe/GTERecipe.java index 925e2849..cb1a01bd 100644 --- a/src/main/java/com/github/gtexpert/core/loaders/recipe/GTERecipe.java +++ b/src/main/java/com/github/gtexpert/core/loaders/recipe/GTERecipe.java @@ -9,6 +9,7 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.NotNull; @@ -16,6 +17,7 @@ import gregtech.api.GregTechAPI; import gregtech.api.fluids.store.FluidStorageKeys; import gregtech.api.metatileentity.multiblock.CleanroomType; +import gregtech.api.recipes.GTRecipeHandler; import gregtech.api.recipes.ModHandler; import gregtech.api.recipes.RecipeMaps; import gregtech.api.recipes.builders.AssemblyLineRecipeBuilder; @@ -27,6 +29,7 @@ import gregtech.api.unification.material.Materials; import gregtech.api.unification.material.info.MaterialFlags; import gregtech.api.unification.material.properties.PropertyKey; +import gregtech.api.unification.ore.OrePrefix; import gregtech.api.unification.stack.UnificationEntry; import gregtech.common.ConfigHolder; import gregtech.common.blocks.BlockGlassCasing; @@ -52,6 +55,8 @@ public class GTERecipe { + static List materials = new ArrayList<>(GregTechAPI.materialManager.getRegisteredMaterials()); + public static void init() { materials(); items(); @@ -61,6 +66,9 @@ public static void init() { } private static void materials() { + // Remove Gem + materials.forEach(GTERecipe::removeGem); + // Nether Star Dust RecipeMaps.CHEMICAL_RECIPES.recipeBuilder() .input(dust, Materials.Diamond, 1) @@ -842,7 +850,6 @@ private static void blocks() { builderVOM.buildAndRegister(); // Void Ore Miner Recipes - List materials = new ArrayList<>(GregTechAPI.materialManager.getRegisteredMaterials()); materials.forEach(GTERecipe::voidOreMiner); // Void Ore Miner Casing @@ -1047,4 +1054,21 @@ private static void voidOreMiner(@NotNull Material material) { .duration(20).EUt(VA[ZPM]) .buildAndRegister(); } + + /** + * Remove gem recipes + * + * @param material The material + */ + private static void removeGem(Material material) { + if (!ConfigHolder.recipes.disableManualCompression) return; + if (!material.hasProperty(PropertyKey.FLUID)) return; + if (!material.hasProperty(PropertyKey.GEM)) return; + + long materialAmount = OrePrefix.block.getMaterialAmount(material); + GTRecipeHandler.removeRecipesByInputs(RecipeMaps.FLUID_SOLIDFICATION_RECIPES, + new ItemStack[] { MetaItems.SHAPE_MOLD_BLOCK.getStackForm() }, + new FluidStack[] { + material.getProperty(PropertyKey.FLUID).solidifiesFrom(((int) (materialAmount * L / M))) }); + } } diff --git a/src/main/java/com/github/gtexpert/core/mixins/gcym/AlloyBlastRecipeProducerMixin.java b/src/main/java/com/github/gtexpert/core/mixins/gcym/AlloyBlastRecipeProducerMixin.java index 0279dfe2..edfe3d48 100644 --- a/src/main/java/com/github/gtexpert/core/mixins/gcym/AlloyBlastRecipeProducerMixin.java +++ b/src/main/java/com/github/gtexpert/core/mixins/gcym/AlloyBlastRecipeProducerMixin.java @@ -2,20 +2,33 @@ import static com.github.gtexpert.core.integration.deda.recipes.DraconicMaterialsRecipe.ABFDurationMultiplier; import static com.github.gtexpert.core.integration.deda.recipes.DraconicMaterialsRecipe.ABFPyrotheumAmount; +import static gregtech.api.GTValues.*; +import static gregtech.api.unification.material.info.MaterialFlags.*; +import static gregtech.api.unification.ore.OrePrefix.*; +import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import gregtech.api.fluids.store.FluidStorageKeys; import gregtech.api.recipes.RecipeBuilder; +import gregtech.api.recipes.RecipeMaps; import gregtech.api.recipes.builders.BlastRecipeBuilder; +import gregtech.api.recipes.builders.SimpleRecipeBuilder; import gregtech.api.recipes.ingredients.IntCircuitIngredient; +import gregtech.api.unification.material.Material; +import gregtech.api.unification.material.Materials; +import gregtech.api.unification.material.info.MaterialFlag; import gregtech.api.unification.material.properties.BlastProperty; +import gregtech.api.unification.ore.OrePrefix; +import gregtech.common.items.MetaItems; import gregtech.loaders.recipe.CraftingComponent; import gregicality.multiblocks.api.fluids.GCYMFluidStorageKeys; @@ -80,4 +93,128 @@ protected int getGasCircuitNum(int componentAmount) { protected int getPyrotheumCircuitNum(int componentAmount) { return componentAmount + 11; } + + @Inject(method = "addFreezerRecipes", at = @At("HEAD"), cancellable = true) + protected void addFreezerRecipesMixin(@NotNull Material material, @NotNull Fluid molten, + @NotNull BlastProperty property, CallbackInfo ci) { + int vacuumEUt = property.getVacuumEUtOverride() == -1 ? VA[MV] : property.getVacuumEUtOverride(); + int vacuumDuration = property.getVacuumDurationOverride() == -1 ? (int) material.getMass() * 3 : + property.getVacuumDurationOverride(); + boolean highTemp = property.getBlastTemperature() >= 5000; + + // Standard recipes + addMoldRecipe(material, molten, vacuumEUt, Math.max(1, vacuumDuration / 9), highTemp, + null, nugget, MetaItems.SHAPE_MOLD_NUGGET.getStackForm(), (int) (L / 9)); + addMoldRecipe(material, molten, vacuumEUt, vacuumDuration, highTemp, + null, ingot, MetaItems.SHAPE_MOLD_INGOT.getStackForm(), (int) L); + addMoldRecipe(material, molten, vacuumEUt, vacuumDuration, highTemp, + GENERATE_PLATE, plate, MetaItems.SHAPE_MOLD_PLATE.getStackForm(), (int) L); + addMoldRecipe(material, molten, vacuumEUt, vacuumDuration, highTemp, + GENERATE_SMALL_GEAR, gearSmall, MetaItems.SHAPE_MOLD_GEAR_SMALL.getStackForm(), (int) L); + addMoldRecipe(material, molten, vacuumEUt, vacuumDuration * 4, highTemp, + GENERATE_GEAR, gear, MetaItems.SHAPE_MOLD_GEAR.getStackForm(), (int) (L * 4)); + addMoldRecipe(material, molten, vacuumEUt, vacuumDuration * 4, highTemp, + GENERATE_ROTOR, rotor, MetaItems.SHAPE_MOLD_ROTOR.getStackForm(), (int) (L * 4)); + + // Molten -> Fluid conversion + addFluidConversionRecipe(material, molten, vacuumEUt, vacuumDuration, highTemp); + + // Cryotheum recipes (DEDA only, high temp only) + if (highTemp && GTEValues.isModLoadedDEDA()) { + int cryotheumDuration = property.getVacuumDurationOverride() != -1 ? + property.getVacuumDurationOverride() : (int) (material.getMass() * 0.5); + + addCryotheumMoldRecipe(material, molten, vacuumEUt, Math.max(1, cryotheumDuration / 18), + null, nugget, MetaItems.SHAPE_MOLD_NUGGET.getStackForm(), (int) (L / 9)); + addCryotheumMoldRecipe(material, molten, vacuumEUt, cryotheumDuration / 2, + null, ingot, MetaItems.SHAPE_MOLD_INGOT.getStackForm(), (int) L); + addCryotheumMoldRecipe(material, molten, vacuumEUt, cryotheumDuration / 2, + GENERATE_PLATE, plate, MetaItems.SHAPE_MOLD_PLATE.getStackForm(), (int) L); + addCryotheumMoldRecipe(material, molten, vacuumEUt, cryotheumDuration / 2, + GENERATE_SMALL_GEAR, gearSmall, MetaItems.SHAPE_MOLD_GEAR_SMALL.getStackForm(), (int) L); + addCryotheumMoldRecipe(material, molten, vacuumEUt, cryotheumDuration * 2, + GENERATE_GEAR, gear, MetaItems.SHAPE_MOLD_GEAR.getStackForm(), (int) (L * 4)); + addCryotheumMoldRecipe(material, molten, vacuumEUt, cryotheumDuration / 2, + GENERATE_ROTOR, rotor, MetaItems.SHAPE_MOLD_ROTOR.getStackForm(), (int) (L * 4)); + + // Hot Ingot -> Ingot + RecipeMaps.VACUUM_RECIPES.recipeBuilder() + .input(ingotHot, material, 1) + .fluidInputs(GTEMaterials.Cryotheum.getFluid(250)) + .fluidOutputs(GTEMaterials.Pyrotheum.getFluid(GCYMFluidStorageKeys.MOLTEN, 50)) + .output(ingot, material, 1) + .duration(cryotheumDuration / 2) + .EUt(vacuumEUt) + .buildAndRegister(); + + // Molten -> Fluid with Cryotheum + RecipeMaps.VACUUM_RECIPES.recipeBuilder() + .circuitMeta(1) + .fluidInputs(new FluidStack(molten, L)) + .fluidInputs(GTEMaterials.Cryotheum.getFluid(250)) + .fluidOutputs(GTEMaterials.Pyrotheum.getFluid(GCYMFluidStorageKeys.MOLTEN, 50)) + .fluidOutputs(material.getFluid(L)) + .duration(cryotheumDuration / 2) + .EUt(vacuumEUt) + .buildAndRegister(); + } + + ci.cancel(); + } + + private void addMoldRecipe(@NotNull Material material, @NotNull Fluid molten, + int vacuumEUt, int vacuumDuration, boolean highTemp, + @Nullable MaterialFlag flag, @NotNull OrePrefix prefix, + @NotNull ItemStack mold, int fluidAmount) { + if (flag != null && !material.hasFlag(flag)) return; + + RecipeBuilder builder = RecipeMaps.VACUUM_RECIPES.recipeBuilder() + .notConsumable(mold) + .fluidInputs(new FluidStack(molten, fluidAmount)) + .output(prefix, material, 1) + .duration(vacuumDuration) + .EUt(vacuumEUt); + + if (highTemp) { + builder.fluidInputs(Materials.Helium.getFluid(FluidStorageKeys.LIQUID, fluidAmount * 500 / L)) + .fluidOutputs(Materials.Helium.getFluid(fluidAmount * 250 / L)); + } + + builder.buildAndRegister(); + } + + private void addFluidConversionRecipe(@NotNull Material material, @NotNull Fluid molten, + int vacuumEUt, int vacuumDuration, boolean highTemp) { + RecipeBuilder builder = RecipeMaps.VACUUM_RECIPES.recipeBuilder() + .circuitMeta(1) + .fluidInputs(new FluidStack(molten, L)) + .fluidOutputs(material.getFluid(L)) + .duration(vacuumDuration) + .EUt(vacuumEUt); + + if (highTemp) { + builder.fluidInputs(Materials.Helium.getFluid(FluidStorageKeys.LIQUID, 500)) + .fluidOutputs(Materials.Helium.getFluid(250)); + } + + builder.buildAndRegister(); + } + + private void addCryotheumMoldRecipe(@NotNull Material material, @NotNull Fluid molten, + int vacuumEUt, int duration, + @Nullable MaterialFlag flag, @NotNull OrePrefix prefix, + @NotNull ItemStack mold, int fluidAmount) { + if (flag != null && !material.hasFlag(flag)) return; + + RecipeMaps.VACUUM_RECIPES.recipeBuilder() + .notConsumable(mold) + .fluidInputs(new FluidStack(molten, fluidAmount)) + .fluidInputs(GTEMaterials.Cryotheum.getFluid((int) (fluidAmount * 250 / L))) + .fluidOutputs( + GTEMaterials.Pyrotheum.getFluid(GCYMFluidStorageKeys.MOLTEN, (int) (fluidAmount * 50 / L))) + .output(prefix, material, 1) + .duration(duration) + .EUt(vacuumEUt) + .buildAndRegister(); + } }