Skip to content

Commit

Permalink
Merge pull request #633 from trexxet/carbon_sources
Browse files Browse the repository at this point in the history
Carbon sources
  • Loading branch information
planetme authored Jan 1, 2024
2 parents 8f30408 + cd2dc8f commit 5173013
Show file tree
Hide file tree
Showing 23 changed files with 305 additions and 208 deletions.
2 changes: 1 addition & 1 deletion config/betterquesting/DefaultQuests.json
Original file line number Diff line number Diff line change
Expand Up @@ -13366,7 +13366,7 @@
"properties:10": {
"betterquesting:10": {
"autoclaim:1": 0,
"desc:8": "§6Aluminum Hydroxide §r§rcan be reduced to Alumina in an Electric Blast Furnace. Later on, Alumina can be reduced directly to Aluminium for a small price of 960 EU/t.",
"desc:8": "§6Aluminum Hydroxide §r§rcan be reduced to Alumina in an Electric Blast Furnace.",
"globalshare:1": 0,
"icon:10": {
"Count:3": 1,
Expand Down
110 changes: 110 additions & 0 deletions groovy/globals/CarbonGlobals.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
import groovy.transform.TupleConstructor

class CarbonGlobals {

public static void main (String[] args) {}

// Anthracite coal value, so most recipes would require
// equal amount of carbon/coke/anthracite and 2x coal
static final int UNIVERSAL_COAL_EQUIVALENT = 90

trait Combustible {
int duration
}

trait HighPurityCombustible extends Combustible {}

trait Pyrolyzable {
String pyrolysis_product
}

// Get number of items which would contatin %required% amount of
// material if single item has %provider% amount
// E.g. for 90 carbon this would yield 1 for dustCarbon or
// dustAnthracite and 2 for dustCharcoal or gemLigniteCoke
static int num_item_by_provider(int required, int provider) {
int result = required.intdiv(provider)
if (required % provider > 0) {
result += 1
}
return result
}

@TupleConstructor
public static class CarbonSource {
String name
int carbon
String byproduct

public int num_items_by_carbon(int required_carbon) {
return num_item_by_provider(required_carbon, this.carbon)
}

// Return the number of CarbonSource items with summary carbon content
// equal to carbon content of %required_carbon_items% anthracite items
public int equivalent(int required_carbon_items) {
return num_item_by_provider(required_carbon_items * UNIVERSAL_COAL_EQUIVALENT, this.carbon)
}
}

public static sources = [
new CarbonSource('dustCarbon', 100, 'dustTinyAsh').withTraits(HighPurityCombustible).tap {
duration = 1
},
new CarbonSource('gemCoke', 100, 'dustTinyAsh').withTraits(Combustible, Pyrolyzable).tap {
duration = 2
pyrolysis_product = 'dustCarbon'
},
new CarbonSource('dustCoke', 100, 'dustTinyAsh').withTraits(HighPurityCombustible, Pyrolyzable).tap {
duration = 2
pyrolysis_product = 'dustCarbon'
},
new CarbonSource('gemAnthracite', 90, 'dustTinyAsh').withTraits(Combustible, Pyrolyzable).tap {
duration = 2
pyrolysis_product = 'gemCoke'
},
new CarbonSource('dustAnthracite', 90, 'dustTinyAsh').withTraits(Combustible, Pyrolyzable).tap {
duration = 2
pyrolysis_product = 'dustCoke'
},
new CarbonSource('gemLigniteCoke', 75, 'dustTinyAsh').withTraits(Combustible, Pyrolyzable).tap {
duration = 3
pyrolysis_product = 'dustCarbon'
},
new CarbonSource('dustLigniteCoke', 75, 'dustTinyAsh').withTraits(Combustible, Pyrolyzable).tap {
duration = 3
pyrolysis_product = 'dustCarbon'
},
new CarbonSource('gemCoal', 75, 'dustTinyDarkAsh').withTraits(Combustible, Pyrolyzable).tap {
duration = 4
pyrolysis_product = 'gemCoke'
},
new CarbonSource('dustCoal', 75, 'dustTinyDarkAsh').withTraits(Combustible, Pyrolyzable).tap {
duration = 4
pyrolysis_product = 'dustCoke'
},
new CarbonSource('gemCharcoal', 60, 'dustTinyDarkAsh').withTraits(Combustible, Pyrolyzable).tap {
duration = 4
pyrolysis_product = 'gemCoke'
},
new CarbonSource('dustCharcoal', 60, 'dustTinyDarkAsh').withTraits(Combustible, Pyrolyzable).tap {
duration = 4
pyrolysis_product = 'dustCoke'
},
new CarbonSource('gemLignite', 25, 'dustTinyAsh').withTraits(Pyrolyzable).tap {
pyrolysis_product = 'gemLigniteCoke'
},
new CarbonSource('dustLignite', 25, 'dustTinyAsh').withTraits(Pyrolyzable).tap {
pyrolysis_product = 'dustLigniteCoke'
}
]

static Map sourcesMap = sources.collectEntries{[it.name, it]}
public static def byName(String name) {sourcesMap[name] }
public static List byNames(List names) { sourcesMap.subMap(names)*.value }

public static List combustibles() { sources.grep(Combustible) }
public static List highPurityCombustibles() { sources.grep(HighPurityCombustible) }
public static List dusts() { sources.grep { it.name.startsWith('dust') } }

}
30 changes: 0 additions & 30 deletions groovy/globals/Globals.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -32,36 +32,6 @@ class Globals {
"biomesoplenty"
]

public static class Combustible {
String name
String byproduct
int amount_required
int duration
Combustible(name, amount_required, duration, byproduct) {
this.name = name
this.amount_required = amount_required
this.duration = duration
this.byproduct = byproduct
}
}

public static combustibles = [
new Combustible('gemCoke', 1, 3, 'dustTinyAsh'),
new Combustible('dustCoke', 1, 3, 'dustTinyAsh'),
new Combustible('gemAnthracite', 1, 2, 'dustTinyAsh'),
new Combustible('dustAnthracite', 1, 2, 'dustTinyAsh'),
new Combustible('gemCoal', 2, 4, 'dustTinyDarkAsh'),
new Combustible('dustCoal', 2, 4, 'dustTinyDarkAsh'),
new Combustible('gemCharcoal', 2, 4, 'dustTinyDarkAsh'),
new Combustible('dustCharcoal', 2, 4, 'dustTinyDarkAsh'),
new Combustible('dustCarbon', 1, 1, 'dustTinyAsh')
]

public static highPurityCombustibles = [
new Combustible('dustCoke', 1, 2, 'dustTinyAsh'),
new Combustible('dustCarbon', 1, 1, 'dustTinyAsh')
]

public static class InertGas {
String name
int amount_required
Expand Down
10 changes: 9 additions & 1 deletion groovy/material/OreMaterials.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ public class OreMaterials{
.build();

Lignite = new Material.Builder(7033, SuSyUtility.susyId('lignite'))
.gem(1, 1200).ore(2, 1)
.gem(1, 600).ore(2, 1)
.color(0x644646).iconSet(LIGNITE)
.components(Carbon, 1)
.flags(FLAMMABLE, NO_SMELTING, NO_SMASHING, MORTAR_GRINDABLE)
Expand Down Expand Up @@ -563,5 +563,13 @@ public class OreMaterials{
.components(Platinum, 1)
.colorAverage()
.build();

LigniteCoke = new Material.Builder(7075, SuSyUtility.susyId('lignite_coke'))
.gem(1, 1200)
.color(0x8f7070).iconSet(LIGNITE)
.components(Carbon, 1)
.flags(FLAMMABLE, NO_SMELTING, NO_SMASHING, MORTAR_GRINDABLE)
.build();

}
}
1 change: 1 addition & 0 deletions groovy/material/SuSyMaterials.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ class SuSyMaterials {
public static Material Crookesite;
public static Material Dilithium;
public static Material Lignite;
public static Material LigniteCoke;
public static Material Anthracite;
public static Material Acanthite;
public static Material Phosphorite;
Expand Down
86 changes: 34 additions & 52 deletions groovy/postInit/chemistry/ChemistryOverhaul.groovy
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import static globals.Globals.*
import static globals.CarbonGlobals.*

import static gregtech.api.unification.material.Materials.*;
import gregtech.api.unification.material.MarkerMaterials;
Expand Down Expand Up @@ -42,26 +43,6 @@ VACUUM_DT = recipemap('vacuum_distillation')
CRACKER = recipemap('cracker')
FLUID_HEATER = recipemap('fluid_heater')

def COAL_SOURCES = [
"dustCarbon",
"gemCoal",
"dustCoal",
"gemCharcoal",
"dustCoke",
"gemCoke",
"dustCharcoal",
"gemAnthracite",
"dustAnthracite"
]

def CARBON_DUSTS = [
"dustCarbon",
"dustCoal",
"dustCoke",
"dustCharcoal",
"dustAnthracite"
]

ASSEMBLER.recipeBuilder()
.inputs(ore('stickIron') * 4)
.inputs(ore('pipeTinyFluidSteel') * 4)
Expand Down Expand Up @@ -172,40 +153,41 @@ DISTILLERY.recipeBuilder()
.buildAndRegister()

// Carbon Monoxide roaster

for (coal_source in COAL_SOURCES) {
// TODO: set output according to carbon amount?
for (carbon in CarbonGlobals.sources) {
ROASTER.recipeBuilder()
.fluidInputs(fluid('oxygen') * 1000)
.inputs(ore(coal_source))
.circuitMeta(1)
.fluidOutputs(fluid('carbon_monoxide') * 1000)
.duration(80)
.EUt(7)
.buildAndRegister()
.fluidInputs(fluid('oxygen') * 1000)
.inputs(ore(carbon.name) * carbon.equivalent(1))
.circuitMeta(1)
.fluidOutputs(fluid('carbon_monoxide') * 1000)
.duration(80)
.EUt(7)
.buildAndRegister()
}

// Carbon Dioxide roaster
for (coal_source in COAL_SOURCES) {
// TODO: set output according to carbon amount?
for (carbon in CarbonGlobals.sources) {
ROASTER.recipeBuilder()
.fluidInputs(fluid('oxygen') * 2000)
.inputs(ore(coal_source))
.circuitMeta(2)
.fluidOutputs(fluid('carbon_dioxide') * 1000)
.duration(40)
.EUt(7)
.buildAndRegister()
.fluidInputs(fluid('oxygen') * 2000)
.inputs(ore(carbon.name) * carbon.equivalent(1))
.circuitMeta(2)
.fluidOutputs(fluid('carbon_dioxide') * 1000)
.duration(40)
.EUt(7)
.buildAndRegister()
}

//CARBON DISULFIDE

for (coal_source in COAL_SOURCES) {
for (carbon in CarbonGlobals.sources) {
ROASTER.recipeBuilder()
.inputs(ore(coal_source))
.inputs(ore('dustSulfur') * 2)
.fluidOutputs(fluid('carbon_disulfide') * 1000)
.duration(100)
.EUt(60)
.buildAndRegister()
.inputs(ore(carbon.name) * carbon.equivalent(1))
.inputs(ore('dustSulfur') * 2)
.fluidOutputs(fluid('carbon_disulfide') * 1000)
.duration(100)
.EUt(60)
.buildAndRegister()
}


Expand Down Expand Up @@ -2051,10 +2033,10 @@ DRYER.recipeBuilder()

//acetylene

for (carbon in COAL_SOURCES) {
for (carbon in CarbonGlobals.sources) {
EBF.recipeBuilder()
.inputs(ore('dustQuicklime') * 2)
.inputs(ore(carbon) * 3)
.inputs(ore(carbon.name) * carbon.equivalent(3))
.outputs(metaitem('dustCalciumCarbide') * 3)
.fluidOutputs(fluid('carbon_monoxide') * 1000)
.blastFurnaceTemp(2473)
Expand Down Expand Up @@ -2385,10 +2367,10 @@ ROASTER.recipeBuilder()

//Silicon & Graphite

for (carbon in CARBON_DUSTS) {
for (carbon in CarbonGlobals.dusts()) {
ARC_FURNACE.recipeBuilder()
.inputs(ore('dustSiliconDioxide') * 3)
.inputs(ore(carbon) * 1)
.inputs(ore(carbon.name) * carbon.equivalent(2))
.outputs(metaitem('dustSilicon'))
.circuitMeta(1)
.fluidOutputs(fluid('carbon_monoxide') * 2000)
Expand All @@ -2398,7 +2380,7 @@ for (carbon in CARBON_DUSTS) {

ARC_FURNACE.recipeBuilder()
.inputs(ore('dustQuartzite') * 3)
.inputs(ore(carbon) * 1)
.inputs(ore(carbon.name) * carbon.equivalent(2))
.outputs(metaitem('dustSilicon'))
.fluidOutputs(fluid('carbon_monoxide') * 2000)
.EUt(30)
Expand All @@ -2407,7 +2389,7 @@ for (carbon in CARBON_DUSTS) {

ARC_FURNACE.recipeBuilder()
.inputs(ore('dustCertusQuartz') * 3)
.inputs(ore(carbon) * 2)
.inputs(ore(carbon.name) * carbon.equivalent(2))
.outputs(metaitem('dustSilicon'))
.fluidOutputs(fluid('carbon_monoxide') * 2000)
.EUt(30)
Expand All @@ -2416,7 +2398,7 @@ for (carbon in CARBON_DUSTS) {

ARC_FURNACE.recipeBuilder()
.inputs(ore('dustNetherQuartz') * 3)
.inputs(ore(carbon) * 2)
.inputs(ore(carbon.name) * carbon.equivalent(2))
.outputs(metaitem('dustSilicon'))
.fluidOutputs(fluid('carbon_monoxide') * 2000)
.EUt(30)
Expand All @@ -2425,7 +2407,7 @@ for (carbon in CARBON_DUSTS) {

ARC_FURNACE.recipeBuilder()
.inputs(ore('dustSiliconDioxide') * 3)
.inputs(ore(carbon) * 3)
.inputs(ore(carbon.name) * carbon.equivalent(3))
.circuitMeta(2)
.outputs(metaitem('dustSiliconCarbide') * 2)
.fluidOutputs(fluid('carbon_monoxide') * 2000)
Expand Down
5 changes: 3 additions & 2 deletions groovy/postInit/chemistry/StainlessSteelChain.groovy
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import static globals.Globals.*
import static globals.CarbonGlobals.*

import static gregtech.api.unification.material.Materials.*;
import gregtech.api.unification.material.MarkerMaterials;
Expand Down Expand Up @@ -81,11 +82,11 @@ EBF.recipeBuilder()
// .EUt(Globals.voltAmps[3])
// .buildAndRegister()

for (highPurityCombustible in Globals.highPurityCombustibles) {
for (highPurityCombustible in CarbonGlobals.highPurityCombustibles()) {
EBF.recipeBuilder()
.inputs(ore('dustSiliconDioxide') * 3)
.inputs(ore('dustIron') * 3)
.inputs(ore(highPurityCombustible.name) * 2)
.inputs(ore(highPurityCombustible.name) * highPurityCombustible.equivalent(2))
.outputs(metaitem('dustFerrosilicon') * 4)
.fluidOutputs(fluid('carbon_monoxide') * 2000)
.blastFurnaceTemp(1400)
Expand Down
16 changes: 1 addition & 15 deletions groovy/postInit/chemistry/elements/AluminiumChain.groovy
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import static globals.Globals.*
import static globals.CarbonGlobals.*

ROASTER = recipemap('roaster')
CENTRIFUGE = recipemap('centrifuge')
Expand Down Expand Up @@ -112,21 +113,6 @@ ELECTROLYTIC_CELL.recipeBuilder()
.EUt(40)
.buildAndRegister()

// EBF
def combustibles = Globals.combustibles

for (combustible in combustibles) {
EBF.recipeBuilder()
.inputs(ore('dustAlumina') * 10)
.inputs(ore(combustible.name) * combustible.amount_required * 3)
.fluidOutputs(fluid('carbon_dioxide') * 3000)
.outputs(metaitem('ingotAluminium') * 4)
.blastFurnaceTemp(1200)
.duration(60)
.EUt(Globals.voltAmps[3] * 2)
.buildAndRegister()
}

// Production of cryolite

ROASTER.recipeBuilder()
Expand Down
Loading

0 comments on commit 5173013

Please sign in to comment.