Recipes for the growth chamber (#1927)

This commit is contained in:
Redeix 2025-09-29 07:16:09 -05:00 committed by GitHub
parent 12a5f7bac1
commit d4f759f4f5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 189 additions and 18 deletions

View file

@ -464,4 +464,67 @@ function woodBuilder(event, name, lumber, logs, log, stripped_log, plank, stair,
.EUt(GTValues.VA[GTValues.ULV])
}
}
//#endregion
//#region Sterilization
/**
* Creates recipes for sterilizing an item using chemicals or the autoclave.
*
* @param {*} event
* @param {string} input - The input item to be sterilized.
* @param {string} output - The output item after sterilization.
* @param {number} multiplier - Multiplies the fluid amounts and recipe duration. Default multiplier = 1.
* @param {string} [cleanroom] - For if a cleanroom is required. Can be null.
*
* @throws {TypeError} Throws an error if input, output, or multiplier is invalid.
*/
function sterilizeItem(event, input, output, multiplier, cleanroom) {
// Collect errors.
const errors = [];
if (input === undefined || (Array.isArray(input) && input.length !== 1) || output === undefined || (Array.isArray(output) && output.length !== 1)) {
errors.push("input or output is undefined or not equal to one item");
};
if (multiplier <= 0) {
errors.push(`invalid multiplier (${multiplier})`);
};
// If there are any errors, log them all and throw once.
if (errors.length > 0) {
const message = "sterilizeItem errors:\n - " + errors.join("\n - ");
throw new TypeError(message);
};
// Set default multiplier.
let recipe_multiplier = 1;
if (multiplier !== undefined) recipe_multiplier = multiplier;
// Create recipes.
let ethanol_recipe = event.recipes.gtceu.chemical_bath(`tfg:ethanol_cleaning/${input.replace(':', '_')}_to_${output.replace(':', '_')}`)
.itemInputs(input)
.inputFluids(Fluid.of('gtceu:ethanol', 500*recipe_multiplier))
.itemOutputs(output)
.duration(10*20*recipe_multiplier)
.EUt(GTValues.VA[GTValues.MV]);
let hydrogen_peroxide_recipe = event.recipes.gtceu.chemical_bath(`tfg:hydrogen_peroxide_cleaning/${input.replace(':', '_')}_to_${output.replace(':', '_')}`)
.itemInputs(input)
.inputFluids(Fluid.of('gtceu:hydrogen_peroxide', 200*recipe_multiplier))
.itemOutputs(output)
.duration(10*20*recipe_multiplier)
.EUt(GTValues.VA[GTValues.MV]);
let autoclave_recipe = event.recipes.gtceu.autoclave(`tfg:autoclave_cleaning/${input.replace(':', '_')}_to_${output.replace(':', '_')}`)
.itemInputs(input)
.inputFluids(Fluid.of('gtceu:steam', 15360))
.itemOutputs(output)
.duration(240*20*recipe_multiplier)
.EUt(GTValues.VA[GTValues.MV]);
if (cleanroom) {
ethanol_recipe.cleanroom(cleanroom);
hydrogen_peroxide_recipe.cleanroom(cleanroom);
autoclave_recipe.cleanroom(cleanroom);
};
};
//#endregion

View file

@ -156,7 +156,7 @@ function registerTFGBiochemRecipes(event) {
.inputFluids(Fluid.of('gtceu:soldering_alloy', 144))
.itemOutputs('tfg:casings/machine_casing_ultraviolet')
.duration(8*20)
.circuit(4)
.circuit(6)
.EUt(GTValues.VA[GTValues.EV]);
event.recipes.gtceu.assembler('tfg:bioculture_casing')
@ -164,7 +164,7 @@ function registerTFGBiochemRecipes(event) {
.inputFluids(Fluid.of('gtceu:hastelloy_c_276', 288))
.itemOutputs('tfg:casings/machine_casing_bioculture')
.duration(8*20)
.circuit(4)
.circuit(6)
.EUt(GTValues.VA[GTValues.HV]);
event.recipes.gtceu.assembler('tfg:bioculture_glass')
@ -172,7 +172,7 @@ function registerTFGBiochemRecipes(event) {
.inputFluids(Fluid.of('gtceu:glass', 144))
.itemOutputs('tfg:casings/machine_casing_bioculture_glass')
.duration(8*20)
.circuit(4)
.circuit(6)
.EUt(GTValues.VA[GTValues.HV]);
event.shaped('tfg:bioreactor', [
@ -201,12 +201,73 @@ function registerTFGBiochemRecipes(event) {
event.shapeless('tfg:casings/bioculture_rotor_secondary', [
'tfg:casings/bioculture_rotor_primary'
]).id('tfg:shapeless/bioculture_rotor_primary_to_secondary')
]).id('tfg:shapeless/bioculture_rotor_primary_to_secondary');
event.shapeless('tfg:casings/bioculture_rotor_primary', [
'tfg:casings/bioculture_rotor_secondary'
]).id('tfg:shapeless/bioculture_rotor_secondary_to_primary')
]).id('tfg:shapeless/bioculture_rotor_secondary_to_primary');
event.shapeless('tfg:sample_rack', [
'tfg:lab_equipment',
ChemicalHelper.get(TagPrefix.frameGt, GTMaterials.StainlessSteel, 1)
]).id('tfg:shapeless/sample_rack');
event.shaped('tfg:growth_monitor', [
'CEC',
'DBD',
'CAC'
], {
A: 'gtceu:ev_scanner',
B: 'gtceu:computer_monitor_cover',
C: ChemicalHelper.get(TagPrefix.plateDense, GTMaterials.TungstenSteel, 1),
D: '#gtceu:circuits/luv',
E: '#forge:lenses/amethyst'
}).id('tfg:shaped/growth_monitor');
event.recipes.gtceu.assembler('tfg:casings/machine_casing_sterilizing_pipes')
.itemInputs(
ChemicalHelper.get(TagPrefix.frameGt, GTMaterials.get('ostrum'), 1),
ChemicalHelper.get(TagPrefix.pipeQuadrupleFluid, GTMaterials.get('ostrum'), 1),
Ingredient.of('#tfg:components/uv_leds').withCount(16)
)
.inputFluids(Fluid.of('gtceu:borosilicate_glass', 144))
.itemOutputs(Item.of('tfg:casings/machine_casing_sterilizing_pipes').withCount(2))
.duration(8*20)
.circuit(6)
.EUt(GTValues.VA[GTValues.EV]);
event.recipes.gtceu.assembler('tfg:single_itemstack_bus')
.itemInputs(
Ingredient.of('gtceu:iv_input_bus'),
Ingredient.of('gtceu:item_smart_filter'),
Ingredient.of('#tfg:components/uv_leds').withCount(4)
)
.itemOutputs(Item.of('tfg:single_itemstack_bus'))
.duration(15*20)
.circuit(6)
.EUt(GTValues.VA[GTValues.IV])
.cleanroom(CleanroomType.CLEANROOM);
event.recipes.gtceu.assembly_line('tfg:growth_chamber')
.itemInputs(
Ingredient.of('tfg:growth_monitor'),
Ingredient.of('tfg:lab_equipment').withCount(16),
Ingredient.of('#gtceu:circuits/luv').withCount(4),
Ingredient.of('gtceu:iv_electric_pump').withCount(4),
ChemicalHelper.get(TagPrefix.cableGtSingle, GTMaterials.Tungsten, 8)
)
.inputFluids(
Fluid.of('tfg:cryogenized_fluix', 576*4),
Fluid.of('gtceu:residual_radioactive_concoction', 1000*30)
)
.itemOutputs('tfg:growth_chamber')
.duration(1*60*20)
.EUt(GTValues.VA[GTValues.IV])
.cleanroom(CleanroomType.CLEANROOM);
//#endregion
//#region Lab Equipment
event.replaceInput({input: 'tfc:bone_needle'}, 'tfc:bone_needle', '#tfc:sewing_needles')
event.recipes.gtceu.wiremill('tfg:stainless_steel_needle')
@ -234,20 +295,57 @@ function registerTFGBiochemRecipes(event) {
'tfg:filled_dna_syringe'
]).id('tfg:shapeless/filled_dna_syringe_emptying')
event.recipes.gtceu.chemical_bath('tfg:ethanol_cleaning_syringe')
.itemInputs('tfg:dirty_dna_syringe')
.inputFluids(Fluid.of('gtceu:ethanol', 500))
.itemOutputs('tfg:empty_dna_syringe')
event.recipes.gtceu.assembler('tfg:lab_equipment')
.itemInputs(
Ingredient.of('tfg:beaker').withCount(2),
Ingredient.of('tfg:flask').withCount(8),
Ingredient.of('tfg:vial').withCount(16),
Ingredient.of('gtceu:petri_dish').withCount(16),
ChemicalHelper.get(TagPrefix.rod, GTMaterials.SamariumMagnetic, 8)
)
.itemOutputs(Item.of('tfg:lab_equipment').withCount(4))
.duration(10*20)
.EUt(GTValues.VA[GTValues.MV])
.cleanroom(CleanroomType.CLEANROOM)
.EUt(GTValues.VA[GTValues.EV])
.cleanroom(CleanroomType.CLEANROOM);
event.recipes.gtceu.chemical_bath('tfg:hydrogen_peroxide_cleaning_syringe')
.itemInputs('tfg:dirty_dna_syringe')
.inputFluids(Fluid.of('gtceu:hydrogen_peroxide', 200))
.itemOutputs('tfg:empty_dna_syringe')
.duration(10*20)
.EUt(GTValues.VA[GTValues.MV])
.cleanroom(CleanroomType.CLEANROOM)
event.remove({id: 'gtceu:fluid_solidifier/petri_dish_pbi'});
event.remove({id: 'gtceu:fluid_solidifier/petri_dish_ptfe'});
/**
* @type {Array<Object>}
* @property {string} output - Output
* @property {number} fluid_qty - Fluid quantity
* @property {string} mold - Mold
*/
const lab_casting = [
{output: 'gtceu:petri_dish', fluid_qty: 144, mold: 'gtceu:cylinder_casting_mold'},
{output: 'tfg:vial', fluid_qty: 144, mold: 'gtceu:small_pipe_casting_mold'},
{output: 'tfg:flask', fluid_qty: 288, mold: 'gtceu:normal_pipe_casting_mold'},
{output: 'tfg:beaker', fluid_qty: 432, mold: 'gtceu:large_pipe_casting_mold'}
];
lab_casting.forEach(entry => {
event.recipes.gtceu.fluid_solidifier(`tfg:lab_casting/${entry.output.replace(':', '_')}`)
.inputFluids(Fluid.of('gtceu:borosilicate_glass', entry.fluid_qty))
.notConsumable(entry.mold)
.itemOutputs(entry.output)
.duration(Math.max(1, Math.floor(((entry.fluid_qty / 144) * 5) * 20)))
.EUt(GTValues.VA[GTValues.LV]);
});
/**
* @type {Array<Object>}
* @property {string} input - Input
* @property {string} output - Output
* @property {number} multiplier - Multiplier
* @property {CleanroomType} cleanroom - Cleanroom type
*/
const lab_cleaning = [
{input: 'tfg:dirty_dna_syringe', output: 'tfg:empty_dna_syringe', multiplier: 1, cleanroom: CleanroomType.CLEANROOM},
{input: 'tfg:dirty_lab_equipment', output: 'tfg:lab_equipment', multiplier: 1, cleanroom: CleanroomType.CLEANROOM}
];
lab_cleaning.forEach(entry => {
sterilizeItem(event, entry.input, entry.output, entry.multiplier, entry.cleanroom);
});
//#endregion
}

View file

@ -49,6 +49,7 @@ const registerAdAstraMaterials = (event) => {
GTMaterialFlags.FORCE_GENERATE_BLOCK,
GTMaterialFlags.GENERATE_PLATE,
GTMaterialFlags.GENERATE_ROD,
GTMaterialFlags.GENERATE_FRAME,
GTMaterialFlags.DISABLE_ALLOY_BLAST
)
@ -80,4 +81,12 @@ const registerAdAstraMaterials = (event) => {
)
// #endregion
}
const registerAdAstraMaterialModification = (event) => {
const $FLUID_PIPE_PROPERTY = Java.loadClass('com.gregtechceu.gtceu.api.data.chemical.material.properties.FluidPipeProperties')
// Ostrum fluid pipe - same flow rate as titanium, higher temp range
GTMaterials.get('ostrum').setProperty(PropertyKey.FLUID_PIPE, new $FLUID_PIPE_PROPERTY(3700, 150, true, false, true, false));
}

View file

@ -67,6 +67,7 @@ GTCEuStartupEvents.registry('gtceu:material_icon_set', event => {
GTCEuStartupEvents.materialModification(event => {
registerGTCEuMaterialModification(event)
registerGreateMaterialModification(event)
registerAdAstraMaterialModification(event)
})
GTCEuStartupEvents.registry('gtceu:dimension_marker', event => {