From 72ae40a2b4ae0a8f8a386fed5661704c6aa44d40 Mon Sep 17 00:00:00 2001 From: TomPlop Date: Mon, 1 Dec 2025 08:42:45 -0500 Subject: [PATCH] Rework Early Game Fuel (#2309) * Add materials and multiblock * try to fix conflict * Fix conflict * Fix conflict * Rework tungsten line (#5) * fix materials * Update Ostrum to core * Fix conflict * fix conflict * Fix fucking conflict * Upload more changes * Add more things * Introduce new gas fuel * Add Anthracite * Add Syngas early game and more modifications * More fixes * Add textures to fluid --- .../ostrum_linear_accelerator.json | 19 ++ .../machines/ostrum_linear_accelerator.json | 90 ++++++ .../item/ostrum_linear_accelerator.json | 3 + .../block/fluids/fluid.reformate_gas.png | Bin 0 -> 20054 bytes .../fluids/fluid.reformate_gas.png.mcmeta | 5 + .../textures/block/fluids/fluid.syngas.png | Bin 0 -> 19721 bytes .../block/fluids/fluid.syngas.png.mcmeta | 5 + kubejs/server_scripts/gregtech/recipes.js | 61 ---- .../gregtech/recipes.machines.js | 4 +- kubejs/server_scripts/tfg/early_power.js | 264 ++++++++++++++++++ .../tfg/nuclear/recipes.nuclear.js | 32 ++- .../tfg/nuclear/recipes.ostrum.js | 83 ++++++ kubejs/server_scripts/tfg/recipes.js | 2 + .../server_scripts/tfg/recipes.space_ores.js | 49 ---- kubejs/startup_scripts/gtceu/machines.js | 43 ++- kubejs/startup_scripts/gtceu/recipe_types.js | 17 +- kubejs/startup_scripts/main_startup_script.js | 1 + kubejs/startup_scripts/tfg/materials.js | 13 +- .../tfg/materials.power_rework.js | 54 ++++ 19 files changed, 609 insertions(+), 136 deletions(-) create mode 100644 kubejs/assets/tfg/blockstates/ostrum_linear_accelerator.json create mode 100644 kubejs/assets/tfg/models/block/machines/ostrum_linear_accelerator.json create mode 100644 kubejs/assets/tfg/models/item/ostrum_linear_accelerator.json create mode 100644 kubejs/assets/tfg/textures/block/fluids/fluid.reformate_gas.png create mode 100644 kubejs/assets/tfg/textures/block/fluids/fluid.reformate_gas.png.mcmeta create mode 100644 kubejs/assets/tfg/textures/block/fluids/fluid.syngas.png create mode 100644 kubejs/assets/tfg/textures/block/fluids/fluid.syngas.png.mcmeta create mode 100644 kubejs/server_scripts/tfg/early_power.js create mode 100644 kubejs/server_scripts/tfg/nuclear/recipes.ostrum.js create mode 100644 kubejs/startup_scripts/tfg/materials.power_rework.js diff --git a/kubejs/assets/tfg/blockstates/ostrum_linear_accelerator.json b/kubejs/assets/tfg/blockstates/ostrum_linear_accelerator.json new file mode 100644 index 000000000..5c213dc91 --- /dev/null +++ b/kubejs/assets/tfg/blockstates/ostrum_linear_accelerator.json @@ -0,0 +1,19 @@ +{ + "variants": { + "facing=east": { + "model": "tfg:block/machines/ostrum_linear_accelerator", + "y": 90 + }, + "facing=north": { + "model": "tfg:block/machines/ostrum_linear_accelerator" + }, + "facing=south": { + "model": "tfg:block/machines/ostrum_linear_accelerator", + "y": 180 + }, + "facing=west": { + "model": "tfg:block/machines/ostrum_linear_accelerator", + "y": 270 + } + } +} \ No newline at end of file diff --git a/kubejs/assets/tfg/models/block/machines/ostrum_linear_accelerator.json b/kubejs/assets/tfg/models/block/machines/ostrum_linear_accelerator.json new file mode 100644 index 000000000..aed8c8b02 --- /dev/null +++ b/kubejs/assets/tfg/models/block/machines/ostrum_linear_accelerator.json @@ -0,0 +1,90 @@ +{ + "parent": "minecraft:block/block", + "loader": "gtceu:machine", + "machine": "tfg:ostrum_linear_accelerator", + "texture_overrides": { + "all": "tfg:block/casings/machine_casing_mars" + }, + "variants": { + "is_formed=false,recipe_logic_status=idle": { + "model": { + "parent": "gtceu:block/machine/template/cube_all/sided", + "textures": { + "all": "tfg:block/casings/machine_casing_mars", + "overlay_front": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front", + "overlay_front_emissive": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_emissive" + } + } + }, + "is_formed=false,recipe_logic_status=suspend": { + "model": { + "parent": "gtceu:block/machine/template/cube_all/sided", + "textures": { + "all": "tfg:block/casings/machine_casing_mars", + "overlay_front": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_paused", + "overlay_front_emissive": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_paused_emissive" + } + } + }, + "is_formed=false,recipe_logic_status=waiting": { + "model": { + "parent": "gtceu:block/machine/template/cube_all/sided", + "textures": { + "all": "tfg:block/casings/machine_casing_mars", + "overlay_front": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_active", + "overlay_front_emissive": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_active_emissive" + } + } + }, + "is_formed=false,recipe_logic_status=working": { + "model": { + "parent": "gtceu:block/machine/template/cube_all/sided", + "textures": { + "all": "tfg:block/casings/machine_casing_mars", + "overlay_front": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_active", + "overlay_front_emissive": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_active_emissive" + } + } + }, + "is_formed=true,recipe_logic_status=idle": { + "model": { + "parent": "gtceu:block/machine/template/cube_all/sided", + "textures": { + "all": "tfg:block/casings/machine_casing_mars", + "overlay_front": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front", + "overlay_front_emissive": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_emissive" + } + } + }, + "is_formed=true,recipe_logic_status=suspend": { + "model": { + "parent": "gtceu:block/machine/template/cube_all/sided", + "textures": { + "all": "tfg:block/casings/machine_casing_mars", + "overlay_front": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_paused", + "overlay_front_emissive": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_paused_emissive" + } + } + }, + "is_formed=true,recipe_logic_status=waiting": { + "model": { + "parent": "gtceu:block/machine/template/cube_all/sided", + "textures": { + "all": "tfg:block/casings/machine_casing_mars", + "overlay_front": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_active", + "overlay_front_emissive": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_active_emissive" + } + } + }, + "is_formed=true,recipe_logic_status=working": { + "model": { + "parent": "gtceu:block/machine/template/cube_all/sided", + "textures": { + "all": "tfg:block/casings/machine_casing_mars", + "overlay_front": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_active", + "overlay_front_emissive": "gtceu:block/multiblock/gcym/large_centrifuge/overlay_front_active_emissive" + } + } + } + } +} \ No newline at end of file diff --git a/kubejs/assets/tfg/models/item/ostrum_linear_accelerator.json b/kubejs/assets/tfg/models/item/ostrum_linear_accelerator.json new file mode 100644 index 000000000..88514629b --- /dev/null +++ b/kubejs/assets/tfg/models/item/ostrum_linear_accelerator.json @@ -0,0 +1,3 @@ +{ + "parent": "tfg:block/machines/ostrum_linear_accelerator" +} \ No newline at end of file diff --git a/kubejs/assets/tfg/textures/block/fluids/fluid.reformate_gas.png b/kubejs/assets/tfg/textures/block/fluids/fluid.reformate_gas.png new file mode 100644 index 0000000000000000000000000000000000000000..115a2347d3635f389618d4ec13cc0736b633d6b9 GIT binary patch literal 20054 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 literal 0 HcmV?d00001 diff --git a/kubejs/assets/tfg/textures/block/fluids/fluid.syngas.png.mcmeta b/kubejs/assets/tfg/textures/block/fluids/fluid.syngas.png.mcmeta new file mode 100644 index 000000000..c5d457f93 --- /dev/null +++ b/kubejs/assets/tfg/textures/block/fluids/fluid.syngas.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 1 + } +} \ No newline at end of file diff --git a/kubejs/server_scripts/gregtech/recipes.js b/kubejs/server_scripts/gregtech/recipes.js index b289ec1b2..b40802279 100644 --- a/kubejs/server_scripts/gregtech/recipes.js +++ b/kubejs/server_scripts/gregtech/recipes.js @@ -1826,65 +1826,4 @@ const registerGTCEURecipes = (event) => { event.replaceInput( {output: 'gtceu:nano_saber'}, 'gtceu:ruridit_plate', '#forge:plates/ostrum_iodide' ) - // Change - - // The 9x buff for large boiler recipes above does not apply to this for some reason, so it gets 3x duration for an effective 1/3 reduction instead - - event.forEachRecipe({ id: /gtceu:large_boiler\/(minecraft_ladder|gtceu_wood_frame)/ }, recipe => { - var newDuration = recipe.get("duration") - recipe.set("duration", newDuration*3) - }) - - event.forEachRecipe({ id: /gtceu:steam_boiler\/(minecraft_ladder|gtceu_wood_frame)/ }, recipe => { - var newDuration = recipe.get("duration") - recipe.set("duration", newDuration/3) - }) - - // Allow oil in small boilers - - event.remove({ id: "gtceu:large_boiler/gtceu_oil" }) - event.remove({ id: "gtceu:large_boiler/gtceu_oil_heavy" }) - event.remove({ id: "gtceu:large_boiler/gtceu_fish_oil" }) - // This generates both a small boiler and large boiler recipe. Remove it above to avoid a duplicate - event.recipes.gtceu.steam_boiler('tfg:oil') - .inputFluids(Fluid.of('gtceu:oil', 200)) - .duration(200) - .dimension('minecraft:overworld') - - event.recipes.gtceu.steam_boiler('tfg:heavy_oil') - .inputFluids(Fluid.of('gtceu:oil_heavy', 32)) - .duration(200) - .dimension('minecraft:overworld') - - event.recipes.gtceu.steam_boiler('tfg:fish_oil') - .inputFluids(Fluid.of('gtceu:fish_oil', 160)) - .duration(200) - .dimension('minecraft:overworld') - - // These aren't in base GT, but they have the same stats as oil - event.recipes.gtceu.steam_boiler('tfg:raw_oil') - .inputFluids(Fluid.of('gtceu:oil_medium', 200)) - .duration(200) - .dimension('minecraft:overworld') - - event.recipes.gtceu.steam_boiler('tfg:light_oil') - .inputFluids(Fluid.of('gtceu:oil_light', 200)) - .duration(200) - .dimension('minecraft:overworld') - - // Same stats as fish oil - event.recipes.gtceu.steam_boiler('tfg:olive_oil') - .inputFluids(Fluid.of('tfc:olive_oil', 160)) - .duration(200) - .dimension('minecraft:overworld') - - event.recipes.gtceu.steam_boiler('tfg:seed_oil') - .inputFluids(Fluid.of('gtceu:seed_oil', 160)) - .duration(200) - .dimension('minecraft:overworld') - - event.recipes.gtceu.steam_boiler('tfg:soybean_oil') - .inputFluids(Fluid.of('firmalife:soybean_oil', 160)) - .duration(200) - .dimension('minecraft:overworld') } diff --git a/kubejs/server_scripts/gregtech/recipes.machines.js b/kubejs/server_scripts/gregtech/recipes.machines.js index 78e59b039..39b786f03 100644 --- a/kubejs/server_scripts/gregtech/recipes.machines.js +++ b/kubejs/server_scripts/gregtech/recipes.machines.js @@ -1119,7 +1119,7 @@ function registerGTCEuMachineRecipes(event) { // Multiblock - event.shaped('gtceu:ostrum_linear_accelerator', [ + event.shaped('tfg:ostrum_linear_accelerator', [ 'USU', 'WZW', 'PTP' @@ -1131,7 +1131,7 @@ function registerGTCEuMachineRecipes(event) { T: '#forge:single_cables/platinum', P: 'gtceu:iv_electric_pump' } - ).id('gtceu:shaped/ostrum_linear_accelerator') + ).id('tfg:shaped/ostrum_linear_accelerator') event.recipes.gtceu.assembler('tfg:ostrum_harvester') .itemInputs( diff --git a/kubejs/server_scripts/tfg/early_power.js b/kubejs/server_scripts/tfg/early_power.js new file mode 100644 index 000000000..da5dfcefb --- /dev/null +++ b/kubejs/server_scripts/tfg/early_power.js @@ -0,0 +1,264 @@ +// priority: 0 + +function registerTFGEarlyPower(event) { + + const $ChanceLogic = Java.loadClass('com.gregtechceu.gtceu.api.recipe.chance.logic.ChanceLogic') + + // New Fuels + + // Syngas + + event.custom({ + type: 'vintageimprovements:vacuumizing', + ingredients: [{ item: 'minecraft:charcoal' }, { fluid: 'gtceu:creosote', amount: 250 }], + results: [{ fluid: 'tfg:syngas', amount: 100 }], + heatRequirement: "heated", + processingTime: 750 + }).id('tfg:vi/vacuumizing/syngas_from_charcoal') + + event.custom({ + type: 'vintageimprovements:vacuumizing', + ingredients: [{ item: 'minecraft:coal' }, { fluid: 'gtceu:creosote', amount: 250 }], + results: [{ fluid: 'tfg:syngas', amount: 200 }], + heatRequirement: "heated", + processingTime: 750 + }).id('tfg:vi/vacuumizing/syngas_from_coal') + + event.custom({ + type: 'vintageimprovements:vacuumizing', + ingredients: [{ item: 'gtceu:coke_gem' }, { fluid: 'gtceu:creosote', amount: 250 }], + results: [{ fluid: 'tfg:syngas', amount: 400 }], + heatRequirement: "heated", + processingTime: 750 + }).id('tfg:vi/vacuumizing/syngas_from_coke') + + event.custom({ + type: 'vintageimprovements:vacuumizing', + ingredients: [{ item: 'beneath:cursecoal' }, { fluid: 'gtceu:creosote', amount: 250 }], + results: [{ fluid: 'tfg:syngas', amount: 400 }], + heatRequirement: "heated", + processingTime: 750 + }).id('tfg:vi/vacuumizing/syngas_from_anthracite') + + //#region Reformate Gas + + // Charcoal + + event.recipes.gtceu.coal_liquefaction_tower('tfg:raw_aromatic_mix_charcoal') + .itemInputs(Item.of('minecraft:charcoal', 24)) + .inputFluids(Fluid.of('gtceu:creosote', 1000)) + .outputFluids(Fluid.of('gtceu:coal_tar', 500), Fluid.of('tfg:syngas', 3200), Fluid.of('tfg:raw_aromatic_mix', 1000)) + .duration(20*600) + .circuit(1) + .EUt(GTValues.VA[GTValues.LV]) + + event.recipes.gtceu.coal_liquefaction_tower('tfg:raw_aromatic_mix_charcoal_hydrogen') + .itemInputs(Item.of('minecraft:charcoal', 24)) + .inputFluids(Fluid.of('gtceu:creosote', 1000)) + .perTick(true) + .chancedFluidInput(Fluid.of('gtceu:hydrogen', 1), 1000, 0) + .perTick(false) + .outputFluids(Fluid.of('gtceu:coal_tar', 500), Fluid.of('tfg:syngas', 3200), Fluid.of('tfg:raw_aromatic_mix', 1000)) + .duration(20*200) + .circuit(2) + .EUt(GTValues.VHA[GTValues.LV]) + + // Coal + + event.recipes.gtceu.coal_liquefaction_tower('tfg:raw_aromatic_mix_coal') + .itemInputs(Item.of('minecraft:coal', 10)) + .inputFluids(Fluid.of('gtceu:creosote', 1000)) + .outputFluids(Fluid.of('gtceu:coal_tar', 1000), Fluid.of('tfg:syngas', 6400), Fluid.of('tfg:raw_aromatic_mix', 1000)) + .duration(20*600) + .circuit(1) + .EUt(GTValues.VA[GTValues.LV]) + + event.recipes.gtceu.coal_liquefaction_tower('tfg:raw_aromatic_mix_coal_hydrogen') + .itemInputs(Item.of('minecraft:coal', 10)) + .inputFluids(Fluid.of('gtceu:creosote', 1000)) + .perTick(true) + .chancedFluidInput(Fluid.of('gtceu:hydrogen', 1), 1000, 0) + .perTick(false) + .outputFluids(Fluid.of('gtceu:coal_tar', 1000), Fluid.of('tfg:syngas', 6400), Fluid.of('tfg:raw_aromatic_mix', 1000)) + .duration(20*200) + .circuit(2) + .EUt(GTValues.VHA[GTValues.LV]) + + // Coke + + event.recipes.gtceu.coal_liquefaction_tower('tfg:raw_aromatic_mix_coke') + .itemInputs(Item.of('gtceu:coke_gem', 5)) + .inputFluids(Fluid.of('gtceu:creosote', 1000)) + .outputFluids(Fluid.of('gtceu:coal_tar', 2000), Fluid.of('tfg:syngas', 12800), Fluid.of('tfg:raw_aromatic_mix', 1000)) + .duration(20*600) + .circuit(1) + .EUt(GTValues.VA[GTValues.LV]) + + event.recipes.gtceu.coal_liquefaction_tower('tfg:raw_aromatic_mix_coke_hydrogen') + .itemInputs(Item.of('gtceu:coke_gem', 5)) + .inputFluids(Fluid.of('gtceu:creosote', 1000)) + .perTick(true) + .chancedFluidInput(Fluid.of('gtceu:hydrogen', 1), 1000, 0) + .perTick(false) + .outputFluids(Fluid.of('gtceu:coal_tar', 2000), Fluid.of('tfg:syngas', 12800), Fluid.of('tfg:raw_aromatic_mix', 1000)) + .duration(20*200) + .circuit(2) + .EUt(GTValues.VHA[GTValues.LV]) + + // Anthracite + + event.recipes.gtceu.coal_liquefaction_tower('tfg:raw_aromatic_mix_anthracite') + .itemInputs(Item.of('beneath:cursecoal', 5)) + .inputFluids(Fluid.of('gtceu:creosote', 1000)) + .outputFluids(Fluid.of('gtceu:coal_tar', 2000), Fluid.of('tfg:syngas', 12800), Fluid.of('tfg:raw_aromatic_mix', 1000)) + .duration(20*600) + .circuit(1) + .EUt(GTValues.VA[GTValues.LV]) + + event.recipes.gtceu.coal_liquefaction_tower('tfg:raw_aromatic_mix_anthracite_hydrogen') + .itemInputs(Item.of('beneath:cursecoal', 5)) + .inputFluids(Fluid.of('gtceu:creosote', 1000)) + .perTick(true) + .chancedFluidInput(Fluid.of('gtceu:hydrogen', 1), 1000, 0) + .perTick(false) + .outputFluids(Fluid.of('gtceu:coal_tar', 2000), Fluid.of('tfg:syngas', 12800), Fluid.of('tfg:raw_aromatic_mix', 1000)) + .duration(20*200) + .circuit(2) + .EUt(GTValues.VHA[GTValues.LV]) + + // Aromatic Processing + + event.recipes.gtceu.chemical_reactor('tfg:aromatic_feedstock') + .inputFluids(Fluid.of('tfg:raw_aromatic_mix', 1000), Fluid.of('gtceu:benzene', 525), Fluid.of('gtceu:steam', 1000)) + .outputFluids(Fluid.of('tfg:aromatic_feedstock', 1000)) + .duration(20*30) + .EUt(GTValues.VA[GTValues.LV]) + + event.recipes.gtceu.chemical_reactor('tfg:reformed_aromatic_feedstock') + .chancedInput(Item.of('gtceu:tiny_rhenium_dust'), 100, 0) // 1% chance + .inputFluids(Fluid.of('tfg:aromatic_feedstock', 1000)) + .outputFluids(Fluid.of('tfg:reformed_aromatic_feedstock', 1000)) + .duration(20*18) + .EUt(GTValues.VA[GTValues.MV]) + + // Reformate Gas Alternative Step + + event.recipes.gtceu.cracker('tfg:reformate_gas_cracker') + .inputFluids(Fluid.of('tfg:reformed_aromatic_feedstock', 1000), Fluid.of('gtceu:steam', 2000)) + .outputFluids(Fluid.of('tfg:reformate_gas', 2000)) + .outputFluids(Fluid.of('tfg:cracker_off_gas', 1000)) + .duration(20*60) + .EUt(GTValues.VA[GTValues.MV]) + + event.recipes.gtceu.chemical_reactor('tfg:reformate_gas') + .inputFluids(Fluid.of('tfg:reformed_aromatic_feedstock', 1000), Fluid.of('gtceu:steam', 1000)) + .outputFluids(Fluid.of('tfg:reformate_gas', 2000)) + .duration(20*60) + .EUt(GTValues.VA[GTValues.MV]) + + // Recycling + + event.recipes.gtceu.electrolyzer('tfg:cracker_off_gas_recycling') + .inputFluids(Fluid.of('tfg:cracker_off_gas', 1000)) + .outputFluids(Fluid.of('gtceu:carbon_dioxide', 500), Fluid.of('gtceu:hydrogen', 500)) + .chancedOutput(Item.of('gtceu:tiny_rhenium_dust'), 100, 0) // 1% chance + .duration(20*4.5) + .EUt(GTValues.VA[GTValues.HV]) + + // Modify Recipe to balance new line + + event.remove({ id: 'gtceu:extractor/charcoal_extraction' }) + event.recipes.gtceu.extractor('tfg:charcoal_extraction') + .itemInputs(Item.of('minecraft:charcoal')) + .outputFluids(Fluid.of('gtceu:wood_tar', 100)) + .duration(20*6.4) + .EUt(GTValues.VA[GTValues.MV]) + + //#endregion + + //#region Rebalance Fuel + + // Change + + // The 9x buff for large boiler recipes above does not apply to this for some reason, so it gets 3x duration for an effective 1/3 reduction instead + + event.forEachRecipe({ id: /gtceu:large_boiler\/(minecraft_ladder|gtceu_wood_frame)/ }, recipe => { + var newDuration = recipe.get("duration") + recipe.set("duration", newDuration*3) + }) + + event.forEachRecipe({ id: /gtceu:steam_boiler\/(minecraft_ladder|gtceu_wood_frame)/ }, recipe => { + var newDuration = recipe.get("duration") + recipe.set("duration", newDuration/3) + }) + + // Allow oil in small boilers + + event.remove({ id: "gtceu:large_boiler/gtceu_oil" }) + event.remove({ id: "gtceu:large_boiler/gtceu_oil_heavy" }) + event.remove({ id: "gtceu:large_boiler/gtceu_fish_oil" }) + // This generates both a small boiler and large boiler recipe. Remove it above to avoid a duplicate + event.recipes.gtceu.steam_boiler('tfg:oil') + .inputFluids(Fluid.of('gtceu:oil', 200)) + .duration(200) + .dimension('minecraft:overworld') + + event.recipes.gtceu.steam_boiler('tfg:heavy_oil') + .inputFluids(Fluid.of('gtceu:oil_heavy', 32)) + .duration(200) + .dimension('minecraft:overworld') + + event.recipes.gtceu.steam_boiler('tfg:fish_oil') + .inputFluids(Fluid.of('gtceu:fish_oil', 160)) + .duration(200) + .dimension('minecraft:overworld') + + // These aren't in base GT, but they have the same stats as oil + event.recipes.gtceu.steam_boiler('tfg:raw_oil') + .inputFluids(Fluid.of('gtceu:oil_medium', 200)) + .duration(200) + .dimension('minecraft:overworld') + + event.recipes.gtceu.steam_boiler('tfg:light_oil') + .inputFluids(Fluid.of('gtceu:oil_light', 200)) + .duration(200) + .dimension('minecraft:overworld') + + // Same stats as fish oil + event.recipes.gtceu.steam_boiler('tfg:olive_oil') + .inputFluids(Fluid.of('tfc:olive_oil', 160)) + .duration(200) + .dimension('minecraft:overworld') + + event.recipes.gtceu.steam_boiler('tfg:seed_oil') + .inputFluids(Fluid.of('gtceu:seed_oil', 160)) + .duration(200) + .dimension('minecraft:overworld') + + event.recipes.gtceu.steam_boiler('tfg:soybean_oil') + .inputFluids(Fluid.of('firmalife:soybean_oil', 160)) + .duration(200) + .dimension('minecraft:overworld') + + //#region New Power Generation + + // Add Syngas + + event.recipes.gtceu.steam_boiler('tfg:syngas') // Small Boiler and Large Boiler divided by 4 + .inputFluids(Fluid.of('tfg:syngas', 100)) + .duration(40*20*4) + .dimension('minecraft:overworld') + + event.recipes.gtceu.gas_turbine('tfg:syngas') // Gas Turbine + .inputFluids(Fluid.of('tfg:syngas', 1)) + .EUt(-(32)) + .duration(20*0.2) + + // Reformate Gas + + event.recipes.gtceu.gas_turbine('tfg:reformate_gas') // Gas Turbine + .inputFluids(Fluid.of('tfg:reformate_gas', 1)) + .EUt(-(32)) + .duration(20*1) + +} \ No newline at end of file diff --git a/kubejs/server_scripts/tfg/nuclear/recipes.nuclear.js b/kubejs/server_scripts/tfg/nuclear/recipes.nuclear.js index 7791089f8..29df43882 100644 --- a/kubejs/server_scripts/tfg/nuclear/recipes.nuclear.js +++ b/kubejs/server_scripts/tfg/nuclear/recipes.nuclear.js @@ -56,14 +56,14 @@ function registerTFGNuclearRecipes(event) { .duration(20*600) .EUt(GTValues.VA[GTValues.EV]) .dimension('ad_astra:mars') - +/* event.recipes.gtceu.nuclear_fuel_factory('tfg:tbu_232_rod') .inputFluids(Fluid.of('gtceu:nuclear_waste', 32000)) .itemInputs('2x #forge:rods/thorium_232', 'tfg:empty_rod') .itemOutputs('tfg:tbu_232_rod') .duration(20*300) .EUt(GTValues.V[GTValues.IV]) - +*/ event.recipes.gtceu.assembler('tfg:empty_rod') .itemInputs('3x gtceu:cobalt_large_restrictive_item_pipe', '3x gtceu:lead_huge_fluid_pipe') .itemOutputs('tfg:empty_rod') @@ -181,20 +181,32 @@ function registerTFGNuclearRecipes(event) { event.recipes.gtceu.heat_exchanger('uranium_steam') .perTick(true) .inputFluids(Fluid.of('minecraft:water', 10)) - .inputFluids(Fluid.of('gtceu:radioactive_steam', 10)) + .inputFluids(Fluid.of('gtceu:radioactive_steam', 1600)) .inputFluids(Fluid.of('gtceu:ammonium_formate', 10)) - .outputFluids(Fluid.of('gtceu:dense_steam', 10)) + .outputFluids(Fluid.of('gtceu:dense_steam', 1600)) .outputFluids(Fluid.of('gtceu:formamide', 10)) .perTick(false) .duration(20*5) .EUt(1) + .circuit(1) + .dimension('ad_astra:mars') + + event.recipes.gtceu.heat_exchanger('uranium_steam_power_only') + .perTick(true) + .inputFluids(Fluid.of('minecraft:water', 10)) + .inputFluids(Fluid.of('gtceu:radioactive_steam', 1600)) + .outputFluids(Fluid.of('gtceu:dense_steam', 1600)) + .perTick(false) + .duration(20*5) + .EUt(1) + .circuit(2) .dimension('ad_astra:mars') event.recipes.gtceu.heat_exchanger('plutonium_steam') .perTick(true) .inputFluids(Fluid.of('minecraft:water', 10)) - .inputFluids(Fluid.of('gtceu:irradiated_steam', 10)) - .outputFluids(Fluid.of('gtceu:dense_steam', 10)) + .inputFluids(Fluid.of('gtceu:irradiated_steam', 1600)) + .outputFluids(Fluid.of('gtceu:dense_steam', 1600)) .perTick(false) .duration(20*5) .EUt(1) @@ -229,7 +241,7 @@ function registerTFGNuclearRecipes(event) { .notConsumable(Item.of('tfg:thorium_rod')) .perTick(true) .inputFluids(Fluid.of('tfg:heavy_water', 2)) - .outputFluids(Fluid.of('gtceu:dense_steam', 2)) + .outputFluids(Fluid.of('gtceu:dense_steam', 480)) .perTick(false) .dimension('ad_astra:mars') .addData("coolant_heat_per_tick", 1) @@ -248,7 +260,7 @@ function registerTFGNuclearRecipes(event) { .notConsumable(Item.of('tfg:uranium_rod')) .perTick(true) .inputFluids(Fluid.of('tfg:heavy_water', 20)) - .outputFluids(Fluid.of('gtceu:radioactive_steam', 10)) + .outputFluids(Fluid.of('gtceu:radioactive_steam', 1600)) .perTick(false) .addData("coolant_heat_per_tick", 1) .duration(1) @@ -267,7 +279,7 @@ function registerTFGNuclearRecipes(event) { .notConsumable(Item.of('tfg:plutonium_rod')) .perTick(true) .inputFluids(Fluid.of('tfg:heavy_water', 25)) - .outputFluids(Fluid.of('gtceu:irradiated_steam', 40)) + .outputFluids(Fluid.of('gtceu:irradiated_steam', 6400)) .perTick(false) .addData("coolant_heat_per_tick", 1) .duration(1) @@ -435,7 +447,7 @@ function registerTFGNuclearRecipes(event) { //#region Power Generation event.recipes.gtceu.nuclear_turbine('dense_steam') - .inputFluids(Fluid.of('gtceu:dense_steam', 1)) + .inputFluids(Fluid.of('gtceu:dense_steam', 160)) .EUt(-(32)) .duration(20*1.5) diff --git a/kubejs/server_scripts/tfg/nuclear/recipes.ostrum.js b/kubejs/server_scripts/tfg/nuclear/recipes.ostrum.js new file mode 100644 index 000000000..779b382ad --- /dev/null +++ b/kubejs/server_scripts/tfg/nuclear/recipes.ostrum.js @@ -0,0 +1,83 @@ + // priority: 0 + +function registerTFGNOstrumRecipes(event) { + + var $HeatRecipeCapability = Java.loadClass("fi.dea.mc.deafission.common.data.recipe.HeatRecipeCapability"); + var $HeatIngredient = Java.loadClass("fi.dea.mc.deafission.common.data.recipe.HeatIngredient"); + const $ChanceLogic = Java.loadClass('com.gregtechceu.gtceu.api.recipe.chance.logic.ChanceLogic') + + // Ostrum Linear Accelerator Recipes + + // .input($HeatRecipeCapability.CAP, new $HeatIngredient(X, Y)) where X is Minimal Temperature to run and where Y is HU consummed per craft +/* + event.recipes.gtceu.ostrum_linear_accelerator('tfg:ostrum_transformation') + .inputFluids('gtceu:residual_radioactive_concoction 100') + .itemInputs('32x #forge:dusts/ostrum') + .chancedFluidOutputLogic($ChanceLogic.XOR) + .chancedFluidOutput('gtceu:lightweight_ostrum_vapor', 6000, 0) + .chancedFluidOutput('gtceu:ostrum_vapor', 3000, 0) + .chancedFluidOutput('gtceu:dense_ostrum_vapor', 1000, 0) + .dimension('ad_astra:mars') + .duration(20 * 5) + .EUt(GTValues.VA[GTValues.EV]); + + event.recipes.gtceu.ostrum_linear_accelerator('tfg:lightweight_ostrum_vapor_t1') + .perTick(true) + .inputFluids('gtceu:residual_radioactive_concoction 1') + .perTick(false) + .inputFluids(Fluid.of('gtceu:lightweight_ostrum_vapor',1000)) + .inputFluids(Fluid.of('gtceu:radon', 10)) + .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/thorium'), 1, 10) + .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/silver'), 1, 10) + .itemOutputsRanged(Item.of('gtceu:dusty_raw_tricalcium_phosphate'), 1, 10) + .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/bauxite'), 1, 10) + .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/lead'), 1, 10) + //.input($HeatRecipeCapability.CAP, new $HeatIngredient(100, 500)) + .dimension('ad_astra:mars') + .duration(20 * 20) + .circuit(1); + + event.recipes.gtceu.ostrum_linear_accelerator('tfg:lightweight_ostrum_vapor_t2') + .perTick(true) + .inputFluids('gtceu:residual_radioactive_concoction 1') + .inputFluids(Fluid.of('tfg:semiheavy_water', 1)) + .perTick(false) + .inputFluids(Fluid.of('gtceu:lightweight_ostrum_vapor',1000)) + .inputFluids(Fluid.of('gtceu:radon', 10)) + .inputFluids(Fluid.of('gtceu:krypton', 10)) + .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/thorium'), 10, 20) + .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/silver'), 1, 10) + .itemOutputsRanged(Item.of('gtceu:dusty_raw_tricalcium_phosphate'), 1, 10) + .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/bauxite'), 1, 10) + .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/lead'), 1, 10) + .itemOutputsRanged(Item.of('gtceu:dusty_raw_pitchblende'), 1, 10) + //.input($HeatRecipeCapability.CAP, new $HeatIngredient(100, 500)) + .dimension('ad_astra:mars') + .duration(20 * 20) + .EUt(GTValues.VA[GTValues.IV]) + .circuit(2); + + event.recipes.gtceu.ostrum_linear_accelerator('tfg:lightweight_ostrum_vapor_t3') + .perTick(true) + .inputFluids('gtceu:residual_radioactive_concoction 1') + .inputFluids(Fluid.of('tfg:semiheavy_water', 1)) + .perTick(false) + .inputFluids(Fluid.of('gtceu:lightweight_ostrum_vapor',1000)) + .inputFluids(Fluid.of('gtceu:radon', 10)) + .inputFluids(Fluid.of('gtceu:krypton', 10)) + .inputFluids(Fluid.of('gtceu:tritiated_water', 10)) + .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/thorium'), 10, 20) + .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/silver'), 1, 10) + .itemOutputsRanged(Item.of('gtceu:dusty_raw_tricalcium_phosphate'), 1, 10) + .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/bauxite'), 1, 10) + .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/lead'), 10, 10) + .itemOutputsRanged(Item.of('gtceu:dusty_raw_pitchblende'), 10, 20) + .input($HeatRecipeCapability.CAP, new $HeatIngredient(100, 500)) + .dimension('ad_astra:mars') + .duration(20 * 20) + .EUt(GTValues.VA[GTValues.IV]) + .circuit(3); +*/ + //#endregion + +} \ No newline at end of file diff --git a/kubejs/server_scripts/tfg/recipes.js b/kubejs/server_scripts/tfg/recipes.js index 7f37614ce..858f97f91 100644 --- a/kubejs/server_scripts/tfg/recipes.js +++ b/kubejs/server_scripts/tfg/recipes.js @@ -9,6 +9,7 @@ const registerTFGRecipes = (event) => { registerTFGPapermakingRecipes(event) registerTFGRockRecipes(event) registerTFGCollapseRecipes(event) + registerTFGEarlyPower(event) registerTFGMoldRecipes(event) registerTFGMedicineRecipes(event) registerTFGMiscellaneousRecipes(event) @@ -20,6 +21,7 @@ const registerTFGRecipes = (event) => { registerTFGStoneDustRecipes(event) registerTFGNuclearRecipes(event) registerTFGNuclearComponentsRecipes(event) + registerTFGNOstrumRecipes(event) registerTFGBiochemRecipes(event) registerTFGSpaceOres(event) } diff --git a/kubejs/server_scripts/tfg/recipes.space_ores.js b/kubejs/server_scripts/tfg/recipes.space_ores.js index 80a2a5ffe..72ab73e03 100644 --- a/kubejs/server_scripts/tfg/recipes.space_ores.js +++ b/kubejs/server_scripts/tfg/recipes.space_ores.js @@ -153,55 +153,6 @@ function registerTFGSpaceOres(event) { .duration(20 * 30) .EUt(GTValues.VA[GTValues.LV]); - - // Ostrum Linear Accelerator Recipes - - event.recipes.gtceu.ostrum_linear_accelerator('tfg:ostrum_transformation') - .inputFluids('gtceu:residual_radioactive_concoction 100') - .itemInputs('32x #forge:dusts/ostrum') - .chancedFluidOutputLogic($ChanceLogic.XOR) - .chancedFluidOutput('gtceu:lightweight_ostrum_vapor', 6000, 0) - .chancedFluidOutput('gtceu:ostrum_vapor', 3000, 0) - .chancedFluidOutput('gtceu:dense_ostrum_vapor', 1000, 0) - .dimension('ad_astra:mars') - .duration(20 * 5) - .EUt(GTValues.VA[GTValues.EV]); - - event.recipes.gtceu.ostrum_linear_accelerator('tfg:lightweight_ostrum') - .inputFluids('gtceu:lightweight_ostrum_vapor 1000') - .inputFluids('gtceu:residual_radioactive_concoction 100') - .inputFluids(Fluid.of('tfg:heavy_water', 1000)) - .itemOutputsRanged('#forge:dusty_raw_materials/pitchblende', 1, 10) - .itemOutputsRanged('#forge:dusty_raw_materials/silver', 1, 10) - .itemOutputsRanged('#forge:dusty_raw_materials/tricalcium_phosphate', 1, 10) - .dimension('ad_astra:mars') - .duration(20 * 5) - .EUt(GTValues.VA[GTValues.IV]); - - event.recipes.gtceu.ostrum_linear_accelerator('tfg:ostrum') - .inputFluids('gtceu:ostrum_vapor 1000') - .inputFluids('gtceu:residual_radioactive_concoction 100') - .inputFluids(Fluid.of('gtceu:radon', 100)) - .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/bauxite'), 1, 10) - .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/lead'), 1, 10) - .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/beryllium'), 1, 10) - .dimension('ad_astra:mars') - .duration(20 * 5) - .EUt(GTValues.VA[GTValues.IV]); - - event.recipes.gtceu.ostrum_linear_accelerator('tfg:dense_ostrum') - .inputFluids('gtceu:dense_ostrum_vapor 1000') - .inputFluids('gtceu:residual_radioactive_concoction 100') - .inputFluids(Fluid.of('gtceu:tritiated_water', 500)) - .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/thorium'), 1, 10) - .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/uraninite'), 1, 10) - .itemOutputsRanged(Item.of('#forge:dusty_raw_materials/hematite'), 1, 10) - .dimension('ad_astra:mars') - .duration(20 * 5) - .EUt(GTValues.VA[GTValues.IV]); - - //#endregion - // #region Zirconium event.recipes.gtceu.chemical_reactor('tfg:silicon_tetrachloride') diff --git a/kubejs/startup_scripts/gtceu/machines.js b/kubejs/startup_scripts/gtceu/machines.js index 45e7d1b21..855fb2722 100644 --- a/kubejs/startup_scripts/gtceu/machines.js +++ b/kubejs/startup_scripts/gtceu/machines.js @@ -270,8 +270,8 @@ const registerGTCEuMachines = (event) => { .recipeType('nuclear_fuel_factory') .recipeModifiers( [ - GTRecipeModifiers.PARALLEL_HATCH, - (machine, recipe) => GTRecipeModifiers.pyrolyseOvenOverclock(machine, recipe), + GTRecipeModifiers.PARALLEL_HATCH, + (machine, recipe) => GTRecipeModifiers.pyrolyseOvenOverclock(machine, recipe), GTRecipeModifiers.BATCH_MODE ] ) @@ -451,7 +451,7 @@ const registerGTCEuMachines = (event) => { event.create('ostrum_linear_accelerator', 'multiblock') .rotationState(RotationState.NON_Y_AXIS) - .recipeType('ostrum_linear_accelerator') + .recipeType('dummy_recipe') .recipeModifiers([GTRecipeModifiers.PARALLEL_HATCH, GTRecipeModifiers.OC_NON_PERFECT, GTRecipeModifiers.BATCH_MODE]) .appearanceBlock(() => Block.getBlock('tfg:casings/machine_casing_mars')) .pattern(definition => FactoryBlockPattern.start() @@ -502,4 +502,39 @@ const registerGTCEuMachines = (event) => { 'tfg:block/casings/machine_casing_mars', 'gtceu:block/machines/thermal_centrifuge') -} + //#region Power Rework + + // Coal Liquefaction Tower + + event.create('coal_liquefaction_tower', 'multiblock') + .machine((holder) => new CoilWorkableElectricMultiblockMachine(holder)) + .rotationState(RotationState.NON_Y_AXIS) + .recipeType('coal_liquefaction_tower') + .recipeModifiers([(machine, recipe) => GTRecipeModifiers.crackerOverclock(machine, recipe), GTRecipeModifiers.BATCH_MODE]) + .appearanceBlock(() => Block.getBlock('gtceu:solid_machine_casing')) + .pattern(definition => FactoryBlockPattern.start() + .aisle('CCC', 'D D', 'D D', 'DED', 'DED', 'BBB') + .aisle('CCC', ' Y ', ' E ', 'E#E', 'EEE', 'BMB') + .aisle('CXC', 'D D', 'D D', 'DED', 'DED', 'BBB' ) + .where('X', Predicates.controller(Predicates.blocks(definition.get()))) + .where('A', Predicates.blocks('gtceu:secure_maceration_casing')) + .where('B', Predicates.blocks('gtceu:solid_machine_casing').setMinGlobalLimited(4) + .or(Predicates.abilities(PartAbility.IMPORT_FLUIDS).setPreviewCount(2)) + .or(Predicates.abilities(PartAbility.IMPORT_ITEMS).setPreviewCount(1))) + .where('C', Predicates.blocks('gtceu:solid_machine_casing') + .or(Predicates.abilities(PartAbility.EXPORT_FLUIDS).setPreviewCount(2)) + .or(Predicates.abilities(PartAbility.INPUT_ENERGY).setMinGlobalLimited(1).setMaxGlobalLimited(2).setPreviewCount(1)) + .or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1).setPreviewCount(1))) + .where('D', Predicates.blocks('create:metal_girder')) + .where('E', Predicates.blocks('gtceu:steam_machine_casing')) + .where('Y', Predicates.heatingCoils()) + .where('M', Predicates.abilities(PartAbility.MUFFLER).setExactLimit(1)) + .where('#', Predicates.air()) + .where(' ', Predicates.any()) + .build() + ) + .workableCasingModel( + 'gtceu:block/casings/solid/machine_casing_solid_steel', + 'gtceu:block/multiblock/distillation_tower') + +} \ No newline at end of file diff --git a/kubejs/startup_scripts/gtceu/recipe_types.js b/kubejs/startup_scripts/gtceu/recipe_types.js index 4550c419c..7f345b855 100644 --- a/kubejs/startup_scripts/gtceu/recipe_types.js +++ b/kubejs/startup_scripts/gtceu/recipe_types.js @@ -39,10 +39,11 @@ const registerGTCEuRecipeTypes = (event) => { event.create('heat_exchanger') .category('heat_exchanger') .setEUIO('in') - .setMaxIOSize(0, 0, 4, 4) + .setMaxIOSize(1, 0, 3, 3) .setSlotOverlay(false, false, GuiTextures.ATOMIC_OVERLAY_1) .setProgressBar(GuiTextures.PROGRESS_BAR_GAS_COLLECTOR, FillDirection.LEFT_TO_RIGHT) .setSound(GTSoundEntries.TURBINE) + /* Just keeping it in case we got mod issues event.create('fission_reactor') .category('fission_reactor') @@ -68,12 +69,20 @@ const registerGTCEuRecipeTypes = (event) => { .setProgressBar(GuiTextures.PROGRESS_BAR_GAS_COLLECTOR, FillDirection.LEFT_TO_RIGHT) .setSound(GTSoundEntries.TURBINE) - event.create('ostrum_linear_accelerator') - .category('ostrum_linear_accelerator') + event.create('dummy_recipe') + .category('dumme_recipe') .setEUIO('in') .setMaxIOSize(1, 3, 3, 3) .setSlotOverlay(false, false, GuiTextures.EXTRACTOR_OVERLAY) .setProgressBar(GuiTextures.PROGRESS_BAR_EXTRACT, FillDirection.LEFT_TO_RIGHT) .setSound(GTSoundEntries.BATH) -} + event.create('coal_liquefaction_tower') + .category('coal_liquefaction_tower') + .setEUIO('in') + .setMaxIOSize(2, 0, 3, 3) + .setSlotOverlay(false, false, GuiTextures.HEATING_OVERLAY_1) + .setProgressBar(GuiTextures.PROGRESS_BAR_DISTILLATION_TOWER, FillDirection.LEFT_TO_RIGHT) + .setSound(GTSoundEntries.COMBUSTION) + +} \ No newline at end of file diff --git a/kubejs/startup_scripts/main_startup_script.js b/kubejs/startup_scripts/main_startup_script.js index 8cbdb2757..27c4287d5 100644 --- a/kubejs/startup_scripts/main_startup_script.js +++ b/kubejs/startup_scripts/main_startup_script.js @@ -60,6 +60,7 @@ GTCEuStartupEvents.registry('gtceu:material', event => { registerTFGMaterials(event) registerTFGNuclearMaterials(event) registerTFGBiolineMaterials(event) + registerTFGPowerReworkMaterials(event) }) GTCEuStartupEvents.registry('gtceu:material_icon_set', event => { diff --git a/kubejs/startup_scripts/tfg/materials.js b/kubejs/startup_scripts/tfg/materials.js index 27a1e6339..604dc83df 100644 --- a/kubejs/startup_scripts/tfg/materials.js +++ b/kubejs/startup_scripts/tfg/materials.js @@ -437,12 +437,12 @@ const registerTFGMaterials = (event) => { .components('2x hydrogen', '12x tungsten', '42x oxygen') .flags(GTMaterialFlags.DISABLE_DECOMPOSITION) - event.create('tfg:ammonium_tungstate') - .dust() - .flags(GTMaterialFlags.DISABLE_MATERIAL_RECIPES, GTMaterialFlags.DISABLE_DECOMPOSITION) - .iconSet(GTMaterialIconSet.DULL) - .components('10x ammonia', '1x tfg:tungstate') - .color('0xfafafa') + event.create('tfg:ammonium_tungstate') + .dust() + .flags(GTMaterialFlags.DISABLE_MATERIAL_RECIPES, GTMaterialFlags.DISABLE_DECOMPOSITION) + .iconSet(GTMaterialIconSet.DULL) + .components('10x ammonia', '2x hydrogen', '12x tungsten', '42x oxygen') + .color('0xfafafa') event.create('tfg:apt') .gem() @@ -495,6 +495,7 @@ const registerTFGMaterials = (event) => { GTMaterialFlags.EXCLUDE_BLOCK_CRAFTING_BY_HAND_RECIPES, GTMaterialFlags.GENERATE_GEAR ) + .fluidPipeProperties(4250, 1700, true, false, false, false) // #endregion diff --git a/kubejs/startup_scripts/tfg/materials.power_rework.js b/kubejs/startup_scripts/tfg/materials.power_rework.js new file mode 100644 index 000000000..bace22a6d --- /dev/null +++ b/kubejs/startup_scripts/tfg/materials.power_rework.js @@ -0,0 +1,54 @@ + // priority: 0 +"use strict"; + +const registerTFGPowerReworkMaterials = (event) => { + +// Syngas +event.create('tfg:syngas') + .gas(new GTFluidBuilder().state(GTFluidState.GAS).customStill().temperature(650)) + .components('11x carbon', '20x hydrogen', '12x oxygen') + .flags(GTMaterialFlags.DISABLE_DECOMPOSITION) + .color(0x7da6c2) + .secondaryColor(0xcfe3ee) + +// Raw Aromatic Mix +event.create('tfg:raw_aromatic_mix') + .gas(new GTFluidBuilder().state(GTFluidState.GAS).temperature(420)) + .components('137x carbon', '154x hydrogen') + .flags(GTMaterialFlags.DISABLE_DECOMPOSITION) + .color(0x8a4b3d) + .secondaryColor(0xd8b6ac) + +// Aromatic Feedstock +event.create('tfg:aromatic_feedstock') + .gas(new GTFluidBuilder().state(GTFluidState.GAS).temperature(450)) + .components('67x carbon', '74x hydrogen') + .flags(GTMaterialFlags.DISABLE_DECOMPOSITION) + .color(0x915c2f) + .secondaryColor(0xe2c49b) + +// Reformed Aromatic Feedstock +event.create('tfg:reformed_aromatic_feedstock') + .gas(new GTFluidBuilder().state(GTFluidState.GAS).temperature(500)) + .components('133x carbon', '146x hydrogen') + .flags(GTMaterialFlags.DISABLE_DECOMPOSITION) + .color(0x4e6b83) + .secondaryColor(0xbacdde) + +// Reformate Gas +event.create('tfg:reformate_gas') + .gas(new GTFluidBuilder().state(GTFluidState.GAS).customStill().temperature(540)) + .components('13x carbon', '63x hydrogen') + .flags(GTMaterialFlags.DISABLE_DECOMPOSITION) + .color(0x6c7f4e) + .secondaryColor(0xc7d8b1) + +// Cracker Off-Gas +event.create('tfg:cracker_off_gas') + .gas(new GTFluidBuilder().state(GTFluidState.GAS).temperature(480)) + .components('31x carbon', '128x hydrogen', '2x oxygen') + .flags(GTMaterialFlags.DISABLE_DECOMPOSITION) + .color(0xa36f2a) + .secondaryColor(0xecd8ae) + +}