Skip to content

Latest commit

 

History

History
4885 lines (4201 loc) · 259 KB

pfaa.org

File metadata and controls

4885 lines (4201 loc) · 259 KB

Per Fabrica ad Astra: Through craft, to the stars

Goal

Add more realistic and educational aspects to the Minecraft experience. We want to teach science (geology, physics, chemistry, biology, …), math, statistics and engineering (algorithms).

Premise

Extraction and Chemistry

The basic idea is to add many realistic raw materials to the world and then allow the player to mine them and perform chemistry with them to make useful things, including with machines and items from other mods.

Star travel

A relatively advanced player will be capable of building a spaceship, in order to seek out resources on other planets. All items must be discarded prior to launch, due to weight limitations. The player first must colonize the moon. Colonization would initially involve programming of robots to perform most tasks. A progressively larger network/system of domes would be constructed, with a livable atmosphere. Eventually, an interplanetary ship would be constructed in low gravity. Then there is a choice to go towards the sun (Venus, then Mercury) or away (towards Mars). Once on Mars (or Venus) the player must colonize and harvest enough food to make the next jump. From Mars, the player travels to Ganymede (or back to Earth). From Ganymede, the player must build a smaller ship to visit other moons of Jupiter. Or refuel the interplanetary ship and fly to Titan. The player may visit other notable moons of Saturn. Eventually, the player has colonized all planets and notable moons and obtained a resource unique to each. By combining those resources, the player may build an interstellar ship and begins traveling to known exoplanets or psuedo-randomly generated moons. We might also require the user to construct special sensor stations on every planet in order to triangulate the position of the exoplanet. As an alternative to travel, the player may decide to settle down and terraform.

Concepts

Science

Physics

Most of the physics concepts will enter through chemistry. Some of the key concepts would be:

  • Mechanics
  • Thermodynamics
  • Light
  • Electricity and magnetism

Overall, these concepts seem too low-level to easily introduce directly.

Chemistry

This seems like the right level, and is most directly applicable when it comes to mining and crafting things from mined material. This would extend from inorganic to organic chemistry, and even on to some simple biochemistry.

Reactions

Mined materials will be modeled as chemical compounds, and those can then be converted into other compounds using reaction chambers. Initially, technology will only allow the simplest of chambers, such as cauldrons and stills. Eventually, there are BuildCraft machines. Different chambers will carry out different types of reactions. Reaction rates will depend on the free energy. This of course depends on the temperature and pressure.

Knowledge

How to model chemical knowledge? How does the player “learn” that a particuar reaction is possible? The periodic table represents the fundamental knowledge of chemistry, and it is also discrete, so conveniently breaks down into units of achievement. For every mineral or other compound, the player performs a number of simple assays and eventually discovers an element. Once all elements in a particular compound are known, the chemical formula and other information (depending on the general level of technology/knowledge) are revealed. This information includes some subset of the recipes including that compound, as long as the technology exists to achieve the recipe, and all compounds in the reaction are known.

Elements are discovered by solving a puzzle that is roughly inspired by how the element was discovered according to history. The book of the elements will convey hints.

Biology

High-level biological concepts like plant growth, ecology, etc, are already modeled in the game. Perhaps those models could be improved. The low-level concepts like molecular biology would be too complex to model outside of simple e.g. bacterial systems. Genetics is a real possibility. The bees and tree-breeding of Forestry are a good example.

Engineering

Most of Minecraft could be construed as civil engineering. Some disciplines that might need more attention:

Mechanical

Would require much better physical modeling. This would be tough.

Aerospace

Like mechnical, requires more physical modeling.

Chemical

This comes about naturally by constructing the machines necessary to carry out chemistry (see that section).

Electrical

Already exists to some extent with red stone cicuits. Good enough.

Economics/trade

Production is motivated by the economy, and trade would enhance gameplay by encouraging specialization, investment in transportation, etc. To drive tade, we need a non-uniform distribution of resources. This means that minerals should be concentrated in large but infrequent deposits and limited to particular biomes. Crops should be biome-specific. Geologica has achieved this for minerals, but it is still possible to farm crops in any biome. But the villages could be constrained to only produce the appropriate crops (like Millenaire).

History

It is probably best to convey historical events through an adventure format, where the player experiences events first hand and moves through history as the game progresses. Perhaps best achieved through a mod pack.

Agriculture and Forestry

We could add some aspects to agriculture:

Aquaculture

  • Kelp

Feces

Cows and pigs and other animals could be made to poop. Uses of poop:

  • Fertilizer
  • Fuel
  • Tanning (dog or pigeon)
  • Cement for adobe bricks

Genetics ideas

There is a need to genetically engineer crops. This is way more realistic and relevant than bee and tree breeding.

Here is a phylogenetic resource: http://botanistinthekitchen.wordpress.com/the-plant-food-tree-of-life/phylogenetic-tree-view/

List of crops: http://en.wikipedia.org/wiki/List_of_domesticated_plants

Wild relatives (where to find them): http://en.wikipedia.org/wiki/Crop_wild_relative http://en.wikipedia.org/wiki/Center_of_origin

The main idea is to follow a phylogenetic tree. The player obtains some basic crops (maybe the vanilla ones, or foods found in the wild) in the world.

The more closely related the species, the faster they cross. There is a trade-off between investing the effort in finding two closely related species vs. waiting longer for two unrelated species to generate a hybrid.

This design requires that we have the wild forms of the crops (which in the real world are highly localized).

Consider corn as an example. The crop came about from crossing sub-species of Zea mays. It is part of the Andropogoneae tribe, which also includes sugar cane (Saccharum) and sorghum (Sorghum). The sub-family is Panicoideae and family is Poaceae, basically grass. PMP offers several types of grass in that family:

NameSpeciesTribeSubfamilyClade
Blue wheatgrassElymus magellanicusTriticeaePooidaeBOP
MeadowPoa annuaPoeaePooidaeBOP
Meadow foxtailAlopecurus pratensisAveneaePooidaeBOP
Silver moorSesleria argenteaSeslerieaePooidaeBOP
CordSpartina cynosuroidesZoysieaeChloridoideaePACMAD
FountainPennisetum setaceumPaniceaePanicoideaePACMAD
SwitchPanicum virgatumPaniceaePanicoideaePACMAD
MaidenMiscanthus sinensisAndropogoneaPanicoideaePACMAD
PrairieSorghastrum nutansAndropogoneaPanicoideaePACMAD

So the maiden and prairie grasses are the closest, being in the same tribe as corn. Perhaps we could require that at least one parent be a “close” relative, like maiden or prairie. Then, the chance of successful speciation depends on the proximity of the second parent. Best cross would be maiden and prairie, one step down for one of those crossed with fountain or switch, one more down for cord, and the rest are very unlikely.

Similarly, for wheat, blue wheatgrass is obviously closest, but prairie brome is in the same group (between tribe and subfamily).

Old sequence alignment ideas

Somehow the player analyzes the genome of two crops and then enters a mini-game dimension which involves aligning two sequences, where the bases are blocks. An alignment tool (with durability) held by the player shifts blocks around. Obviously, the more closely related the species, the easier it is to align them. Depending on the quality of the alignment, the common ancestor is more or less well known. The better known, the more options for evolving that ancestor to other species, and the easier it is to find its ancestor. Species might evolve in two ways: cross-breeding and mutations. Cross-breeding is something like Forestry. Mutation is a mini-game dimension where the goal is to change a DNA sequence to a target protein. One block per amino acid, with the target sequence on top of the source. Each block would be visually partitioned into the three bases. The player uses a mutagenesis tool (light, chemical, etc) to convert the bases. Each mutation costs some amount of resources, either through direct consumption or tool durability. Transitions should be cheaper than transversions. One has to figure out the cheapest path, given the genetic code.

Wild edible plants

Generating realistic, edible, non-crop plants, is also interesting: it introduces unconventional (at least for this part of the world) foods and makes the world richer. Call it ForageCraft or WildCraft. The main hurdle is the need to create textures. We hate making textures.

The wild plants are not cultivatable. Trees do not yield saplings, plants do not yield seeds, but they can be replanted directly. Breeding is the only means of reproduction and can lead to cultivation, through mutation. The breeding needs to integrate with existing tree breeding in Forestry and Extra Trees. The mutation (speciation) probabilities depend on phylogenetic tree.

Mod integration: if a mod like ET is loaded, we should use the blocks from that mod. We could require certain mods, but it would be nice to be functional independently. Obviously, breeding will depend on Forestry and Agricraft.

Here is a list of what might be found in the wild:

PlantPhylogeneticsModBiomeValueUseNotes
BerriesNat,PHC,BOP,PMPTemperate2Eat fruit
MushroomsVanilla,PHC,PMP--Eat whole
Dandelionsasterid/asteralesVanilla,PMP-1Eat; white juice as glue
Acacia treerosid/fabaceaeVanilla,BOP,ForSavannah1Eat leaves
Agavemonocot/asparagalesDesert1Eat, stringBOP has inedible bromeliad
Alfalfarosid/fabaceae/faboideae
Almond treerosid/rosaceae/prunusETTropics, desert, evergreen scrub3Eat nuts
Amaranth (Pigweed)caryophyllales/amaranthaceaeWidespread1Eat leaves, seedsWeed
Arctic willowrosid/malpighialesTundra1Eat raw shoots
Arrowrootmonocot/zingiberalesTropical3Boil roots
AsparagusPHCTemperate2Boil stems
BaelHills and plains, forests2Eat fruit
BambooBOP,PHC,PMPMoist, tropical2Eat shoots
BananaPHC,ETTropics3Eat fruit
Baobab treeForestrySavanna2Eat roots, fruit, stringForestry has no fruit
Batoko plumRainforest2Eat fruit (best as jam)
BearberryArctic2Eat fruitSimilar: cloud berry
BeechETForest3Eat nuts
Bignay treerosid/malpighialesRainforest2Eat fruit
Breadfruit treerosid/rosaceae/moraceaeTropics, forest2Cook fruit; sap is glue, pulp paper
BurdockTemperate2Boil roots
Cannamonocot/zingiberalesTropical2Eat roots; string, seeds purple dye
Cashew treerosid/sapindales/…Tropical3Eat nuts
Cattailsmonocot/poalesBOP,PMP-2Eat shoots; weaving
Cactus fruitcaryophyllales/cactaceaePHC,PMPDesert2Eat fruit
Chestnut treerosid/fagalesForestryForest3Roast nutsForestry not edible
ChicoryPlains1Eat
ChickweedTemperate fields1Eat leaves
ChufaMoist sandy2Eat; oil from tuber
CloverBOP-1Boil to eat
CoconutBeach3Eat; string
CrowberryTundra2Eat fruit
Date PalmDesert1Eat fruit; weaving
DaylilyTropic, temperate2Eat roots
Desert parsleyDesert1Eat roots
Elderberry treeET,PMPSwamps2Eat fruit
FireweedTemperate plains, arctic1Eat all
Fishtail PalmWarm/moist mountains3Eat juice from top
Ginsengasterid/apialesForest (hills)0No food value, but medicinal buffs?
Hawthorn bushTemperate2Eat fruit (apple)
Hazelnut treeETTemperate, outside forests3Eat nuts
Horseradish treeTropical forests1Eat leaves, roast seeds
Iceland mossArctic1Eat whole
Indian potatoTemperate3Better cookedA wild potato?
Jerusalem artichokeTemperate2Eat rootsLooks like sunflower
JewelweedMountain woods2Eat stems
JuniperDry temperate1Eat berries
Kudzu vinesTropical forests2Every partMany uses, ways to eat
KumquatETTropical forests2Eat fruit
LotusRiver3Cook roots
MalangaTropical plains3Cook roots
Mango treePHCMoist tropics3Eat fruit
ManiocTropical3Cook roots
Marsh marigoldSwamp, arctic1Cook it
Maypop vinerosid/malpighialesRiver bank, thicket, pasture2Eat fruit
Mulberry treeForest; string2Eat fruit
NettleMoist temperate3Eat shoots, leavesDamage, unless cooked
Nipa PalmMangrove3Eat fruit on top; sugar-rich sap
Oakvanilla-0Acorn (from ET) flour, bark tanning
Oliveasterid/lamialesETDry coastal1Eat fruit; oil
OrachBeach1Eat entire plant
PapayaPHCRainforest3Eat fruit
PersimmonPHCForest3Eat fruit
PineBOP-1Eat various parts; sap as glue
PlantainET-2Eat fruit
ReedBOPSwamp1Eat anything
Rose AppleTropical forests2-3Eat like an apple, but tropical!
Saskatoon berryLow altitude mountain terrain2Eat fruit
SaxaulDesert-Water from bark
Sea OrachTropical scrub, steppe, desert1Eat leaves
SicklepodFields (weed)1Eat leaves, meat substituteTea is medicinal
(Wild) SorghumPlains-Use as wheat substitute
Sterculia treeTropical forest2Eat seed pods
StonecropPMPTemperate1Eat leaves
SugarcaneVanilla-1Eat raw
SunflowerVanilla-1Eat seeds
Sweetsop treeTropical forest2Eat fruit
Tamarind treeDrier tropics2Eat fruit
TaroTropical fields3Cook roots
TiTropical forest3Cook roots; rope, weaving
Tropical almondTropical forest, beach3Eat seeds
WalnutForestry, PHCForest3Eat nuts
Water chestnutPMPRiver2Eat fruit
Water lillyVanilla,PMPRivers/swamps2Eat all, fruit
Water plantainRivers3Cook roots
Wild appleVanilla-2-3Fruit
Wild caperDry scrub, desert2Eat fruit
Wild carrotBOP,PMP-?Eat tuber
Wild desert gourdDesert2Eat seeds from gourd
Wild sorrelPMPFields1Eat leaves
Wild figPHCTropical forest2Eat fruit
Wild gourdRainforest2Boil fruit
Wild grapeForest2Eat fruit
Wild mintasterid/lamialesPMP
Wild onion/garlicPHCPlains2Eat bulbsAlso, ginger
Wild pistachioDesert, scrub, evergreen forests3Cook nuts
Wild ricePHCTropical2Eat rice
Wild roseVanilla,PMP-1Eat flower
Winged BeanTropical plains2Eat beans (2), tuber (4)
Wooly lousewortTundra2Eat steam after steaming
YamTropical, coniferous forests3Boil root
Yam beanTropical3Eat tuber, better boiled

Hunger key (configurable): 1 :: Refills 0.5 shank 2 :: Refills 1.5 shanks 3 :: Refills 3 shanks (like bread) 4 :: Refills 4 shanks, high saturation (like steak)

Currently about 80 plants. Proposals for simplification:

  • Have one palm tree (+coconut); BOP already has them
  • Have one type of wild herb (mint?), instead of all herbs.

PHC now has all of its plants occuring in the wild as “garden blocks”. This would be an alternative to generating so many types of plants in the world. But Plant Megapack has already shown that it can be fun.

Forestry

Wikipedia has some nice references:

Biofuels

Fibers

Balanced diet

If we have lots of plants, then we have lots of food. To make things more interesting, we should encourage balanced diets. Use something like the food pyramid.

  • Grains: 25%
  • Vegetables: 25%
  • Fruits: 20%
  • Protein: 15%
  • Dairy: 15%
  • Sweets: temporary buff, long term detriment

Balanced diets give buffs, imbalanced have negative effects.

TFC has this feature now. Seems worth porting.

Adapting existing mods

PHC provides many interesting crops. Improvements that should happen for PHC:

  • PHC tools should have durability
  • PHC crops should have biome-specific growth rates
    • In theory achievable via custom soil or base blocks that change/specify themselves when placed, depending on biome
  • PHC should use machines for cooking [easy via KawaiiCrops]
    • Some of these exist now

Turns out someone has integrated PHC with Forestry-like breeding mechanics, and it is totally customizable: Agricraft. In theory, we could have Plant Mega Pack plants mutate to PHC and PMP crops. Agricraft has a bit of that, but it lacks realism. For example, one can cross wheat and white tulips to yield PMP celery. Wheat and while tulips are monocots. Celery is a eudicot.

Blocks

Rocks

Generating terrain with multiple rock types, instead of simply stone, would make mining much more interesting. Not only would it add variety (and thus more creativity in construction), it would also help the player find ores, since ores would be specific to certain rock types. This idea is from TFC, but it also reflects the reality. COG might allow us to generate the rocks, in addition to the ores. It looks like the substitution pattern would work, but it would need a height restriction. Also, we would need restrictions on relative height (percentage of altitude).

There are three types of rock: igneous, sedimentary and metamorphic. The igneous rocks are either intrusive (magma) and extrusive (lava). A second axis is the silicate content, which decreases with felsic, intermediate, mafic and ultramafic. Sedimentary rocks are either clastic or (bio)chemical. The metamorphic rocks can be formed by a number of different processes: hydrothermal, contact, barrovian, blueschist, and eclogite. The last two are probably too deep for us to care about. Unless otherwise indicated, rocks are generated as layers. So far, we have 21 rock types. It would be good to reduce this to 16, just for simplicity. We will need two block IDs anyway, in order to model soft vs. hard rock.

RockClassHardOccursUse
GraniteIn/FelsichardVery common, below sed on landbuilding
DioriteIn/IntervhardBelow granitetools, carving
GabbroIn/MaficvhardBelow basalt/diorite (mtns, ocean)sulfide ores
PeridotiteIn/UMaficvhardRarely under gabbrosulfide ores
*SyeniteIn/alkahardrare granite mtns vein
CarbonatiteIn/alkasoftwith syeniteRE, Nb, Ta
*ApliteIn/quartzhardgranite, < diorite/gabbro vein
RhyoliteEx/FelsichardMountains, topNH4Cl crystal drop (0.01)
AndesiteEx/InterhardMountains, below rhyoliteNH4Cl crystal drop
BasaltEx/MafichardTop ocean, islandsNH4Cl crystal drop
*KomatiiteEx/UMafic-Too deepsulfide ores
MudstoneSedsoftOcean, beach, river, glaciers
*SiltstoneSedsoft
ClaystoneSedsoft
ConglomerateSedsoft
BrecciaMixturesoftLike above, plus b/w rock layers
LimestoneSedmedHillsCaCO3, smelt => CaO + CO2, white dye
SlateMM/barromedUnder mud/clay/siltstone
SchistMM/barromedUnder slate, sometimes igneous
GneissMM/barrohardUnder schist, sometimes igneous
GreenschistMM/barrohardMafic-associated schist
PegmatiteMM/hydrohardVeins, granite, plainsRE, Li, Be, Cs, etc
SerpentiniteMM/hydromedVeins, umafic, no soil, ocean floorNi laterite, talc, asbestos
HornfelsMM/contactvhardb/w granite and lime/dolo
SkarnMM/contactmedb/w granite and lime/dolo, hornfelsCu, Pb, Zn, Fe, Sn, Au, etc
MarbleMM/contacthardb/w granite and lime/doloCentrifuge for CaCO3
QuartziteMM/contactvhardsandstone
*Amphibolite

Placement of the rocks during world generation will be complex. Lets focus first on the bottom layer, which will consist of rock formed by cooling magma, i.e., igneous intrusive rock. These intrusions form dikes as the magma rises, and sills where the magma is deposited. The differentiation occurs by two major processes: fractional crystallization (multiple layers crystallizing from molten rock) and partial melting (where only some of the minerals melt, rise due to lower density, and recrystallize). This follows the order of ultra-mafic, mafic, intermediate, felsic, from bottom to top. We consider only partial melting, for simplicity.

When the magma breaches the surface, we then have extrusive rocks with different crystallization (much more rapid cooling) but the same chemical compositions. The type of rock that emerges depends on how much the rock has cooled, and whether water is present.

Land masses are formed by plate convergence, which occurs at the interface of land and ocean. The oceans then are undergoing plate divergence. Under the ocean, ultra mafic rocks (peridotite) partially melt and rise quickly due to the divergence, and hit the ocean as mafic melts, forming basalt. The melts that fail to reach the surface form the intrusive mafic gabbro. In the case of plate convergence, mountains and volcanoes are formed. Since water from the ocean is brought down into the subduction zone, the melting points of the rocks are lowered and thus more silicate-rich melts (intermediate and felsic) emerge from partial melting. So volcanic islands in the ocean are largely basaltic, while the volcanoes above subduction zones yield rocks like rhyolite and (from mixing of the rhyolitic and mafic magma) andesite. The more water, the more silicate content, and the more violent the eruption.

With that in mind, the oceans are clear: peridotite (too low to include), gabbro, basalt and sediments (mudrock). The vast majority of the land mass is formed from silicate-rich magma that cools before it reaches the surface. This is largely granite. Above subduction zones, granite is pushed up into mountains, above some diorite, then gabbro. In areas outside of the mountains and oceans, the world will only reach down into diorite. We ignore komatiite, because its intrusions happened long ago and has largely metamorphed. We will assume that the extreme hills are a volcanic mountain range, and the ice mountains are a result of sedimentary and metamorphic rock being uplifted (crumpled) by subduction forces.

The generation of the rock layers depends on the biome. The table below attempts to specify the rock combinations for each biome. For simplicity, we group all types of mudrock (claystone, conglomerate, etc) into a single rock. Metamorphic rocks will be listed separately, as their formation will be randomized and replace specific rocks.

The layers are numbered from top (1) to bottom. The final layer should be about half the size of the others.

RockFFHDDHPSJJHEHROMMSIPIMTTHB
Limestone-+1-----+1------+1-+1-
Sedimetary11111111-11--1+2/1111
Granite2222222212---22222
Diorite3333333323---33333
Gabbro--------3-333-----
Rhyolite--------+2---------
Andesite--------+1--1------
Basalt----------2+1/21/2-----

Generation

In the table we list sedimentary as a general class including mudstone, claystone, siltstone, sandstone and limestone. A layer of mudrock will typically consist of a mixture of layers from these rocks. Claystone and siltstone are two ends of the mudstone spectrum. There is currently no “silt” in the game, and it would probably not add much, so we might just get rid of it altogether. The beach and desert will be largely sandstone. The ocean bottom will be limestone, and limestone could also dominate hill biomes. Outside of the hills, lets say 65% mudstone, 10% sandstone, 10% conglomerate/breccia, 10% limestone, and 5% claystone.

Now for metamorphosis.

Mudrock will convert to slate, and slate, along with igneous rocks, can follow the sequence to schist and gneiss. This is most likely to happen in the ice mountain biome, and to a lesser extent the hill biomes, since more pressure will be put on the rock. Slate replaces the top half of the sedimentary layer, schist replaces the top third of the igneous (granite) layer, and gneiss replaces the next third down. Rocks can exist without rocks earlier in the sequence, but having an earlier rock doubles the chance of having a later one.

With regard to contact metamorphism, hornfel and marble will sometimes replace the mudstone between the limestone hills and the underlying granite. The sandstone under the desert hills will sometimes become quartzite.

Serpentinite will occur anywhere an ultra-mafic intrusion might have occurred. We will say that this is in the bottom (diorite) layer, except maybe in the extreme hills and ocean, where serpentinite is common throughout the crust. If it contacts soil, the soil needs to be converted to lateritic soil, which does not support growth. Pegmatites occur in granite and gneiss. Both of these will be large, thick veins that contain many ores.

Grinding

Perhaps claystone, conglomerate, mudstone, etc all yield a type of “debris” that could be processed? The debris would be similar to gravel, but distinct from it. Or it could be a type of gravel, but then what of the existing gravel? Either way, the debris would act much like gravel/sand. Maybe just coarser than gravel.

See the code (GeoMaterial) for rock compositions.

Stone variants

How do we handle variants of stone? These include:

  • Moss stone (moss form of cobblestone)
  • Mossy stone brick
  • Chiseled stone brick
  • Cracked stone brick

Till now, we have considered these as special items found in the world (strongholds, temples, etc). Not as building materials. But what happens when:

  • Forestry moisterizer generates mossy stone/brick
  • Gregtech hammer cracks stone brick
  • Gregtech file chisels stone brick

For now, it seems we could add recipes targeting the vanilla variants. Adding custom chiseled or mossy stone would probably not be very attractive in general. And cracked stone brick? In general, these seem to have limited utility.

Metal Ore Minerals

MineralMetalsStateHardProdFe:xSymbolOccursRoastSlagBlastCentrifugeAlt Use
Magnetite*Feoxidestrong1600shaftBIF, placer, LImagnets
Hematite*Feoxidestrong*BIFred dye
Limonite*Fe(Ni/Co)hydrox(clay)*junglejungle/swamp claybrown dye
Rock saltNa(K)saltweak263:1desertevaporite
Chalcopyrite*Cu(Mo/Co/Ag/Au/Pt)sulfidemedium-shaftVMS, SEDEX, porphyry
SphaleriteZn(Cd)sulfidemedium-shaftco-chalco, limestone
Galena*Pb(Ag)sulfideweak-co-chalco, limestonewireless comm
LepidoliteLi(+Cs/Rb)phyllomedium0.0536:1pegmatite
SpodumeneLisilicatestrong0.2012:1
DolomiteMgcarbomedium2713:2Clay-like, ocean and desert
MagnesiteMgcarbomedium183:1peridotite, serp, skarn, dolomite
RutileTioxide(sand)0.6granitic mineral sand
IlmeniteTi(Fe)oxidestrong56:1upper LI, sand
PentlanditeNi(Fe)sulfidemediumlower LI, Kambalda
GarnieriteNihydroxmediumserp
Cassiterite*Snoxidestrong-placer, granitic veins
[Wolframite]Woxidemedium-pegmatite
Scheelite*Woxidemedium-SEDEX/pegmatite
Cinnabar*Hgsulfideweak0.002100:1veins ocean basalt, volcanicred dye
Bauxite*Alhydrox(clay)1902:1lateritic depositsAl2O3
ChromiteFeCroxidestrong104:1serp, upper LI+Al/Si=>FeCr
ZirconZrsilicate(sand)1granitic mineral sands
StibniteSbsulfideweak-co-galena in hydroSbO3+Fe=> 1.5 SbSb
Monazite*Ce/La/Nd/Pr/Sm/Uphosph(sand)0.007granitic mineral sands
UraniniteUoxidestronggrind conglom/peg, veins granite/sed
BoraxBoxideweak3lake evaporites
PyrolusiteMnoxideweak20hydro, co-Feviolet glass
[Pollucite]Cs(Rb)silicatestrongpegmatite
BastnasiteCe(+La/Y)fluoritemediumpegmatite, carbonatite, bauxite
TantaliteTa(Nb)oxidestrong-carbonatiteNb
MolybdeniteMosulfideweak0.212:1porphyry1% Re
BariteBasulfatemedium7BIF, Pb/Zn limestone veins, carbonatite
BerylBevstrong0.005w/ scheelite
CelestineSrsulfatemedium18:1w/ gypsum, limestone
[Xenotime]Y/REphosph(sand), pegmatite

In terms of gameplay, there is a limit to the number of ores. The player might constantly encounter ores and have difficulty sorting them. Solutions would include having ores occur rarely, or deriving metals as the by-product of processing other ores. Both support technology tiers, as advanced machines could be required to process the more advanced metals. Currently, that is modeled by the type of pickaxe. The first has the advantage of making discovery more challenging, while the processing approach could encourage automation, because large amounts of ore will need to be processed. It also requires the player to make a decision about how an ore should be processed. Thus, it adds strategy. Ore discovery could also be made more stategic by making deposits depend on the rock type or having deposits co-occur (better dig into that iron because it might have manganese). Some mixture of the two is probably best, and certain metals could be obtained by both approaches.

By changing the ore distributions to such an extent, gameplay is greatly affected. For example, a quarry might only gather one or two types of ore.

Getting balance from production levels is complicated. The ore production levels are confounded with the purity of the ore, while the metal production may represent only a minor application of the ore. We are interested in potential metal production and want to assume that each ore block contains the same amount of metal, across all metal elements. Another assumption: each ore block is the same weight; i.e., they have different densities. We then normalize everything to iron for convenience.

Other Minerals

MineralOccursHardProdUseFormula
Aluniteveins in rhyolitemediumpastalum
Chrysotileserpentiniteweak2asbestos (fireproofing)
Dolomiteclay pattern, ocean and desertmedium-
Malachitelimestone w/ copper oresmediumpastcopper ore, green dye
Gypsumevaporite, limestoneweak140CaSO4
Garnetbeach/river sandweak (sand)blast cobble to smooth, tiny red garnet dust
Glauconiteocean/beachweakgrinding (romans), fertilizer
*Corundumschist,gneiss,marble,pegmatitevery strongrubies and emeralds
Diatomitesed EH/desertweak1.5
Flouritebp of galena/sphalerite/quartzmedium
Graphiteschist,gneiss (strata)weak1
Kyaniteschist,gneiss,quartzite,pegmatitemedium0.4
Soapstoneserpitinite,carbonates(lower)weak7
Olivinegrind peridotite-
Perliteembedded in veins of obsidianstrong0.15
Apatitemarble,pegmatite*strong150
Pumicevolcanic (globular)strong12
Soda ashlake evaporiteweak13
Mirabilitelake evaporiteweak2Na2SO4
Wollastonitelimestone, dolo, skarn (w/ sandstone)medium0.5ceramics,paint,plasticsCaSiO3
Zeolitelake-shaped deposits near volcanoesmedium3adsorption, others
Feldsparprocess pegmatite-20
Quartzprocess pegmatite
Muscovite/Micain pegmatite, process pegmatiteweak0.3fireproof, insulation, lubricant

Sands

Here are some sand types we could model:

TypeOccurrenceUse
Mineral sandbeach/riverplacer deposit (see above)
Garnetbeachabrasive
Volcanic ashextreme hillsabrasive
Quartzdesertabrasive, quartz
Cassiteritebeach/rivertin

Currently, we have different types of mineral sands. These need to be separated into minerals like rutile, zircon, magnetite, etc. This is usually done with electrostatic separation. About 70% of the sand is “trash”. For granitic sands, this means quartz (50%) magnetite (35%), kyanite (15%); for basaltic: garnet (40%), magnetite (35%), chromite (15%) and quartz (10%). The more valuable minerals in the remaining 30% are: ilmenite (50%), zircon (30%), rutile (15%), monazite (5%). Total mineral sand production is 4.8 million tonnes / yr, or about 6:1 with Fe. Basaltic sands will have more ilmenite, while granitic will have less (and thus more zircon, rutile and monazite). Maybe ilmenite (30%), zircon (40%), rutile (20%), monazite (10%).

Summary:

Granitic
35% quartz, 25% magnetite, 5% kyanite, 10% zircon, 15% rutile, 5% ilmenite, 5% monazite
Basaltic
10% quartz, 35% garnet, 25% magnetite, 5% chromite, 15% ilmenite, 5% zircon, 5% rutile

Note that we actually model diatomite and sulfur as sands, due to the form in which they typically occur.

Clays

TypeOccurrenceProdUse
BentoniteEH (from ash)9absorbent, waterproof
KaoliniteJungle37many
Fuller’s earthdesert (sediment)3
LateriteJungleeasy bricks
Yellow/Brown LimoniteLateriteFe ore, dye
BauxiteLateriteAl ore
Vermiculitecarbonatite, skarn, w/phlogopite0.5furnace, fireproof, fertilizer, cement, absorbent

Hot springs

Some percentage of the water source blocks near bedrock will be converted to hot springs, which are infinite steam sources. Buildcraft (or some other mod) has apparently already added springs (infinitely pumpable water sources); just need hot ones.

Brines

Brines are a source of many minerals. We could add these as liquid source blocks in sets that form little lakes/wells. The wasteland water could be considered brine.

Types:

Owens Lake
Borax, NaCl, Na2SO4
Midland
Br, CaCl2, I, MgCl2, KCl, NaCl
Searles Lake
Borax, LiCl, Li2CO3, Mg(OH)2, KCl, NaBr, Na2CO3, NaCl, NaF, Na2PO4, Na2SO4
Silver Peak
Li2CO3, KCl

List of chemicals/minerals:

  • Borax
  • NaCl (halite)
  • NaBr
  • NaF
  • Na2CO3 (soda ash)
  • Na2SO4 (mirabilite)
  • Na3PO4
  • LiCl
  • Li2CO3 (also from spodumene)
  • KCl (sylvite)
  • MgCl2
  • MgSO4 (epsom salt)
  • CaSO4
  • Mg(OH)2
  • CaCl2
  • NaBr
  • Ca(IO3)2

Only the ones in bold are commericially extracted.

Do we really want these four, somewhat arbitrary, types? Probably not. Just take the union. Chemical processing will separate.

NaCl

Need to remove MgSO4, MgCl2 and CaSO4.

  • Ca(OH)2 or NaOH removes Mg2+ as Mg(OH)2.
  • Na2CO3 or CO2 removes Ca2+ as CaCO3.

Alternative is to dry brine, with NaCl precipitating first.

  • Could implement by surrounding single brine block with solid blocks, air on top, in hot+dry biome. After a while, the block is replaced by a brine without NaCl, spawning NaCl dusts.
  • Also support machines like Mariculture vat

Sea water

There are many minerals in sea water. But how to model those? We cannot replace the blocks, because that would break other mods. One could attempt to trace pipes back to the sea, but it would be brittle. Imagine an aqueous accumulator that is accumulating sea water; no other machines, like the liquid transposer, know that it is brine. There is a liquids API in forge now, so in theory things could be abstracted, but there is no way to create a new “subclass” of water. It is either water or brine. So maybe we just need to create brine wells/springs. Otherwise, the processing would need to be very slow, because water is so plentiful. Ensure that source blocks are not transportable by bucket. Or just use the water sources in the ExtraBiomes wasteland. Here is an idea: require that the initial processing (could be some filter or something) must occur in the ocean biome. This more or less achieves the desired effect.

Concrete

Minecraft needs concrete. One of the cool things about concrete is that one can pour it into molds and generate many objects of the same shape. The player could construct a shape out of microblocks, hook it up to a pipe (via some adjacent machine) and pump concrete into it. The machine will then, after some time, yield an item of the desired shape, consuming some amount of concrete.

Crystals

Not sure if we will ever delve into crystals, but here are some notes:

MineralHabitCleavageColorLuster
sphaleriteeuhedral110yellow-brownresinous
fluoriteeuhedral111purple+greenvitreous
baritetabular001whitevitreous
cassiteriteprism-dipyr100+110black-brownmetallic
lepidolitetabular001pink-purplepearly
cinnabar
bastnasitetabular
chalcopyrite
pentlandite
scheelite
wolframite
apatite
beryl
chromite
ilmenite
kyanite
*magnetite
pollucite
spodumene
tantalite
galena
molybdenite
pyrolusite
stibnite
uraninite

Vitreous should be semi-transparent (like stained glass), while resinous should be much more translucent.

Tabular cleavage can have a sloping edge on one side, like BDcraft lapis lazuli.

Items

Chemicals

Properties

We could model chemicals at a number of different levels of detail. For example, we could record every property, or simply consider the name. Optimal is somewhere in between.

Some obvious properties:

  • Formula (name would be in translations)
  • Color (black, blue, green, …)
  • Phase at room temperature (and standard pressure)
  • Hazards: health (0-4), flammability (0-4), reactivity (0-4), special (reacts with water, asphyxiant, oxidizer)

One could imagine adding more properties that might lead to automatic recipe generation, but this is not worth it.

Somehow, I refuse to take the above advice. The elegance of algorithmic recipe generation based on fundamental properties is somehow irresistible to me!

Things we want to automate:

  • Phase transitions: have machines that melt and freeze substances, as well as heat exchangers that e.g. use steam/water transition to add/substract heat to reactors, boilers, etc. Requires: critical temperatures, heat capacity integrated from standard temperature to critical temperature, enthalpy of fusion/vaporization (calculated from dS), need Antoine coefficients to compute boiling temperature by pressure, in theory we could also figure out the dHf for the non-standard states using the standard Hf and the heat capacity information.
  • Enthalpy of reactions: whether a reactor will need cooling, heating, etc. Requires: enthalpy of formation, sometimes enthalpy of solution? Enthalpy of formation could be calculated from the elements if we had the formation reactions, but those are not useful otherwise,
  • Free energy of reaction: whether a reaction can proceed at a given temperature, important for smelting. Requires: enthalpy of formation, entropy.
  • Solubility: for mixing, what dissolves in water? This relates to the dynamic equilibrium, i.e., kinetics, so we might need the direct solubility value, but maybe only a rough one, like insoluble, sparingly soluble, soluble. And maybe solubility will be according to the temperature of the liquid, which we roughly define as cold, standard, hot.
  • Density: for gravity-based separation, known for gasses (assuming ideal) if we know the molar mass,
  • Default oxidation state: for predicting oxide from thermal decomposition of metal carbonates, sulfates, nitrates, etc.

Summary of information needed for solid/liquid/gas/aqueous?:

  • Critical temperatures (relatively easy to find),
  • Shomate (or other function) parameters for heat capacity (tough to find, NIST), or perhaps an average value when not available, note that Shomate parameters additionally provide the enthalpy of formation, standard entropy and (through some solving) the critical temperatures,
  • Antoine coefficients (tough to find, NIST),
  • Enthalpy of formation (not easy),
  • Standard molar entropy (not easy),
  • Rough solubility in different solvents (cold/standard/hot) (easy),
  • Density (easy),
  • Viscosity (easy for typical liquids, gases),
  • Magnetic susceptibility (probably on an adhoc basis),
  • Atomic weight (elements only, easy),
  • Default oxidation state (elements only, easy),
  • Color (easy),
  • Hazard (easy)

The problem is that many of these properties are unknown/unpublished, even for well-known chemicals. If the enthalpy of formation and/or standard molar entropy are missing, then we depend on the temperature/energy being specified at the reaction level, or there are simply no reactions (for that phase). Calculating the phase change enthalpies becomes more problematic though. We could always simply not support conversion of the material to that phase, but that seems restrictive.

Assume we only have solid-phase properties. We could, with some effort, get the heat of fusion from the solubility, and from that derive the entropy, and the enthalpy (at that temperature). In fact, we could even assume that the lines in the ellingham diagram are linear, despite phase changes (only gas makes a big difference). But even with that, we do not know the heat capacity of the liquid, so how to heat it?

The basic problem is that we are designing an extension to a sandbox game and yet there is a point at which the player will move beyond what is well understood by Science (mostly due to a lack of interest). At that point, we need to either restrict or extrapolate.

For example, these guys extrapolate the thermodynamics of NiO https://www.msm.cam.ac.uk/teaching/partIB/courseC/BH.pdf. They guess the entropy (which would give us the enthalpy of fusion) and enthalpy of formation.

An approach to estimating the enthalpies of fusion from solubility: http://www.umsl.edu/~chickosj/JSCPUBS/mottpce.pdf Might only apply to organics, but who cares?

Extrapolation would probably take too much work and would require intuition that we are lacking. It is much better to restrict than to introduce poorly defined chemicals. But what happens when a substance is heated – we should not allow it to be heated infinitely (obviously the machine has some limit, but that may be far in excess of the critical point). Easiest option is to simply cease the heating and alert the user that the melting point has been reached, but that would be lame in a machine that is supposed to yield a molten product. But really, do we care about accurately modeling the transition to something that is essentially useless?

A bigger problem is the heat capacity: it has a complex dependency on temperature; i.e., there is no single value. Without that, it really does not matter whether we know the heats of phase transitions. We have to rely on the Shomate Equation, from the NIST webbook. Should we pre-integrate the Shomate equation to the transition point? This seems too limited. For example, we need to know how to heat substances to arbitrary temperatures, for thermal decomposition, arbitrary reactions, etc. If we knew the full parameter set, we could directly simulate the thermodynamic system. Unfortunately, most chemicals/phases do not have a set of Shomate parameters.

One possibility is using simpler forms of the equation. We have resources with Cp values for a range of temperatures, as well as standard enthalpies of formation and molar entropies. That might work, for the standard phase, at least.

Metals

MetalModsSourceProdFe:xMod BalUses (besides alloys)Current usesIssues
LithiumGTbrine, ore0.03522:12:1 clay
SodiumGTbrine, ore3:11:1 clay
PotassiumGTbrine, ore3:15:1 sp
MagnesiumGTbrine, ore0.610:18:1 obs
CalciumGTlimestone1:1 bone
TitaniumGTore
Vanadiummagnetite in gabbro0.0520:1V2O5 catalyst
FeCrGTore75:1
Molybdenumore0.2511:1
TungstenGTore0.112:1
ManganeseM2/GToreblack dye
CobaltCu/Ni0.0618:1
NickelGTore, Mn ocean27:1NiMH batties, green glass
CopperBC/IC2ore123:12:1Many
SilverRP2/TE/FZCu/Ni/Zn/Au/Pb0.01524:1catalyst
ZincM2ore123:1GT: Sub for Sn in adv alloyNeed more uses to equate with Sn
CadmiumZn0.0124:1
MercuryGTore
AluminumGT/Xyore
Silicon(GT)IS:sand+carbonCircuits (refined), SiH4 fuel
TinBC/IC2ore0.212:13:1Many
LeadTEore, Cu/Zn/Ag3.56:16:1radiation, batteries, early wirelessIC2: reactors; GT: soldering, batteries
Boronore
Bismuthore, Pb ore0.024
TelluriumCu/Ni5e-5192:1+Cd solars
PlatinoidGTNi/Cu/Cr/Co2e-496:1catalyst
Zirconiumore
Cesiumore2e-5
Neodymiumelectro: Monazite
UraniumIC2ore
Niobiumore0.00148:1
Tantalumore0.00148:1
ArsenicCu0.044
Antimonyore0.1412:1SbO3: flame retardants; LA batteries
GermaniumZn

Non-metal elements

ElementSourceProdUse
H2see here
O2H2O electrolysis
N2cryogenic fractionation of atmosphere
Sprocessing gypsum, oil by-product (H2S)fertilizer, H2SO4
Papatite
Ibrines0.03
Fflourite (CaF2)5
Clelectrolysis of NaCl, etc
Brbrines
Henatural gas
Arcryogenic fractionation of atmosphere
Necryogenic fractionation of atmosphere
Krcryogenic fractionation of atmosphere
Xecryogenic fractionation of atmosphere

Hydrogen sources

There are many ways to produce hydrogen. The most prevalent is Steam reforming, but there is also:

  • Brine electrolysis during Cl production
  • H2O electrolysis
  • Partial oxidation of coal, oil or CH4 (2CH4 + O2 => 2CO + 4H2)
    • Pt/Al2O3, Pt/ZrO2, (preferably) Pt/Ce-ZrO2 catalysts lower required temperature from 1200C to 800C.
    • Lignite + oxygen
      • Other coals, oil + oxygen + steam
  • Dissociation of NH3 to yield forming gas
    • Heat NH3 to 920 C in presence of Ni catalyst, then

2NH3 => N2 + 3H2 (forming gas)

  • Passing steam over hot iron (steam-iron method)
  • Coke oven gas contains ~50% hydrogen; separated by condensation of other components, or PSA.

Elements too rare

  • Sc: 2 tons / yr production
  • Tc: almost non-existant in nature
  • Fr/Ra/Rn: radioactive

Alloys

Metals can be mixed in a huge number of ways. Here are the available alloys (the percentages are weight-based and relative to 1.0 base metal):

AlloyMetalsProductionUse
SteelFe+1%Cmany
High C SteelFe+5%Cheat treatable
Stainless steel6Fe+2FeCr+Mnblastmany
Galvanized steelFe+Zn
Lead-calciumCa+Pbbatteries
Lead-antimonySb+Pbbatteries
Brass3Cu+Zn
Tellurium alloysTe+Steel/Cu/Pb
Aircraft Al (7075)Al+2%Zn+2%Mg+.5%Cutransport
Duralumin (2024)Al+1%Cu+1.5%Mg+.5%Mnair, hardware
Al LiAl+10%Li
General Al (6061)Al+.5%Si+1%Mgtanks, arch
Marine Al (5086)Al+4%Mg+.5%Mnboat hulls
Wire Al (8000)Could not find thiswiring
AlnicoFe+40%Al+30%Ni+20%Comagnets
Wood’s metalBi+50%Pb+40%Sn+30%Cd
NichromeNi+30%Crignition, foam cutters
Aluminum bronzeCu+20%Al
Beryllium copperCu+10%Be
Nickel silverCu+25%Zn+25%Niplumbing
CupronickelCu+10%Ni+1%Feheat exchange, valves
MischmetalCe+50%La+25%Nd+25%Prferrocerium
FerroceriumMischmetal+30%FeAdd Ce to steel
FerrochromeFe+Cr
FerromolybdenumFe+50%MoAdd Mo to HLSA
FerrosiliconSi+20%Fereduction
FerrotitaniumTi+25%Festeel cleaning
FerrovanadiumFe+VAdd V to steel
InvarFe+50%Ni
Grey cast ironFe+10%C+5%Si+.5%Mnengines, gearboxes, tools
White cast ironFe+10%C+2%Si+.5%Mnbearing surfaces
Malleable cast ironwhite cast ironannealedaxles, shafts
Pig iron
SolderSn+50%Pbelectronics
some form: Sn-Ag-Cu
Type alloyPb+10%Sn+15%Sbprinting
Ti-6-4Ti+10%Al+4%V
ZamakZn+8%Al
ZircaloyZr+1%Snnuclear reactors

Alloy Steel

Properties of steel alloys:

  • Machinability: MnS, Bi, Pb, Se, Te
  • Corrosion resistance: Cr, Cu, Ni
  • Toughness: B, Cr, Mn, Mo, Ni, Cu, Si, V, W, Ti, Nb
  • Temperature tolerance: W, V

Other alloyants: Al, Co, Ce, Sn, Zn, Zr

We could model steel alloys by allowing up to 3 non-iron ingots to be included in the smelting. Those non-iron ingots could be all of the same material, or different materials. In addition, there could be “super alloys”.

How to model the different properties? One easy way is higher yield recipes, or recipes that require less of one alloy vs. another. But what about differentiating the properties?

Types of steel alloys:

AlloyantsPropertiesUse
2%Mnhardened, abrasion (MnS: machinability)grinders, crushers, tracks
5%Nistrengthened, low temperaturestorage tanks, turbines, screws, bolts
3%Ni+1%Crtoughened, corrosion resistant” ” ”
Motoughenedeasy to roll, aircraft parts
3Cr+1Motoughened, corrosion resistant” ” ”
3Ni+2Cr+1Momore toughened, corrosion resistant
4Ni+Momore toughened
Crcorrosion resistant
3Cr+1Vtoughened, corrosion resistantshafts of cars, locomotives, aircraft
2W+1CrHT hardness, corrosion resistantcutting tools
Mo+Cr+VHT hardness, corrosion resistanthigh temp applications: shafts
2Si+1Mnmore toughenedsprings, punches, chisels

Stainless steel (Cr, Ni, C, Mn, Si, P, S, N):

Hazards

There are many fun possibilities when it comes to hazards. These rely on some model for chemical spills. Does this happen when a pipe or machine breaks (presumably due to some initial hazard?).

Health

Damages player without other environmental effects.

  • Level >1, starts to hurt if ingested (increasing damage with level).
  • Level >2, hurts if held in inventory (open container) or touched
  • Level 3: damage similar to cave spider poison
  • Level 4: like burning in lava (must drink milk to stop)

New idea: it seems that gases should apply effects when at eye level (inhaled) and liquids when contacted in the world. Ingestion of liquids should magnify effects.

Fluid contact:

  • Level >=2: Poison effect
  • Level >=3: Increased poison effect
  • Level >=4: Increased poison effect, usually lethal

Fluid ingestion (drinking a potion):

  • Level >=1: Nausea
  • Level >=2: Nausea + poison effect
  • Level >=3: Nausea + increased poison effect
  • Level >=4: Nausea + increased poison effect, usually lethal

Some liquids may have additional effects. They may also need custom countermeasures. For now, level >= 3 treated by milk.

If the boiling point is near room temperature, contact with liquid is equivalent to contact with the gas. Or we need to model liquids spawning gases, which would be cool.

Flammability

Will ignite when in contact with a flame/spark, depending on temperature. Temperatures for each level:

  • Level 1: > 200 C
  • Level 2: > 100 C
  • Level 3: > 23 C, flammable outside of ice biomes
  • Level 4: < 23 C, always flammable

At ordinary temperature, the difference between L3 and L4 is a matter of degree. If player catches on fire with flammable items in inventory, the items will burn up, damaging the player. For L3 and L4, using flint and steel will ignite items in inventory.

Adapting vanilla mechanics:

  • Lava should be capable of igniting anything >=L1. This means a custom material that is flammable.
  • Fire should spread according to a probability that is proportional to the flammability. This is easy to support. But what about modeling the ambient temperature? Not right now.

In vanilla, liquids (water) extinguish torches. But what happens when a flammable fluid attempts to flow into a torch? Probably should ignite with the same probability as fire spreading.

Reactivity

Will explode, depending on temperature/force:

  • Level 1: explodes if heated > 200 C
  • Level 2: explodes if heated > 100 C
  • Level 3: explodes if near any heating or another explosion
  • Level 4: explodes whenever thrown (or anything from L3)

L4 has explosive radius of TNT; otherwise creeper radius.

Special

  • Water reactive: obviously blows up when contacts water!
  • Asphyxiant: when exposed, count down as if underwater, then pain
  • Oxidizer: fuels existing fires

Solutions

A solution consists of a solvent and a solute, which is present in some concentration. Modeling the full continuous range of concentrations would be too complicated. Instead, we have two: dilute (0.1M) and concentrated (10M). The solubility of the solvent determines wheter a particular concentration is feasible. We therefore really only need three levels of solubility: very soluble (can form concentrated solutions), soluble (can form dilute solutions), and insoluble (does not form solutions).

Just for reference, from Sigma Aldrich (units in mL/g):

Very SolubleLess than 1
Freely Soluble1 to 10
Soluble10 to 30
Sparingly Soluble30 to 100
Slightly Soluble100 to 1000
Very Slightly Soluble1000 to 10,000
Practically InsolubleGreater than 10,000

Temperature

We will not model arbitrary temperatures of materials, except within machines. Instead, we assume room temperature or the transition temperature to the phase closer to room temperature.

There is a point at which thermal radiation becomes visible, and we essentially render liquids as lava.

TemperatureColor
480 °C (896 °F)faint red glow
580 °C (1,076 °F)dark red
730 °C (1,350 °F)bright red, slightly orange
930 °C (1,710 °F)bright orange
1,100 °C (2,010 °F)pale yellowish orange
1,300 °C (2,370 °F)yellowish white
> 1,400 °C (2,550 °F)white

Colored lighting is possible: http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/wip-mods/1446134-1-7-2-beta-colored-light-api-mod-writers-can

Industrial Minerals

Feldspar

Technically two types based on the cation: Ca/Na (plagioclase) or K (orthoclase). We group them together. Feldspar is useful as a strengthening agent and flux in glass and ceramic making. It also serves as a filler in paints.

Could have feldspar (tiny dust) combine with ordinary clay to produce bricks for half the energy. Same for sand to glass.

Calcite

Uses include:

  • Portland cement (concrete and mortar):
  • Clinker from roasting limestone and clay: 3CaCO3+clay@1700K
  • Gypsum added to clinker (10%), 1 tiny dust per clinker dust
  • Gypsum + clinker mixture is ground to cement
    • Concrete:
  • Railcraft, IE and Chisel have concrete, but not cement
  • Need to mix 2x gravel + 1x sand + 1x cement + water
    • Natural sources include volcanic ash, diatomite, calcined zeolite
    • Geopolymer cement: slag + coal fly ash + sodi1um silicate with >1.4 SiO2:NaO molar ratio; no cooking required
    • Quicklime (Witchery, Eng. Toolbox, ReactorCraft) by roasting in a furnace
      • Should be required flux for steel making in arc furnace.
      • Roast with coke to form CaC, used for making acetylene.
      • Convert to Ca(OH)2 by boiling in water (Forestry carpenter?)
  • Solvay process
  • NaOH production
  • Metallurgy (froth flotation, etc)
  • Sewage treatment
  • Removing SO2 from flue gas (=> CaSO4)
  • Sugar from beets
  • Sand-lime bricks
  • Alkaline soil for farming
    • Alkaline soil for farming
      • Best if integrated with Agricraft
    • Flux for iron blast smelting
      • No mod blast furnances handle flux, issue filed with IE
    • Removing SO2 from flue gas (=> CaSO4)

Tools

Batteries

In increasing order of cost and energy density:

  • Lead acid
  • NiMH
  • Lithium iron phosphate

Plastics

Plastics could serve as alternative to metal in many items. Would be produced from petroleum processing.

Processing

Unit Operations

These are the physical units of chemical engineering. Many of these involve automatic transport of a material, separation of mixture components based on physical properties, and changing the physical form of a material. Since physical processes are relatively straight-forward, we should be able to auto-generate unit operations, without any explicit declarations.

Fluid flow

Transport

Fittings and valves

Fittings connect pipes, as well as measure and regulate flow through pipes. Buildcraft should provide enough here. The table below outlines this. We have excluded trivial connections between pipes.

TypeBCNotes
Cross/TeeIron pipe3>1 output, with cycling
On/Off valveIron/Wooden piperedstone signal
CheckIron pipe
RegulatingGates
Pipes

BC has us covered here. One issue is temperature. Might temperature (difference from ambient) degrade over time, much like electricity? Then there are different types of insulation. This will not match-up well with the existing use of steam, molten redstone, etc.

Pumps

BC has a pump.

Compressers

We can use BC pipes to move gases as a fluid, but we need the equivalent of a pump, except for gas. It would collect gas from the atmosphere. If nearby a machine that emits gas freely (like a furnace) it will collect the gas and output to a pipe. This is the fan from GasCraft.

Filtration

The idea here is to separate solid phase from liquid phase.

Fluidization

The inverse of filtration: turning a solid into a liquid by infusing it with water or gas. Just a type of mixing.

Heat transfer

Heat (energy) transfer from one substance to another. Applications:

  • Heat exchanger: efficient transfer between fluids
  • Thermal energy storage: e.g. insulated water tanks (could store Railcraft steam in a tank)
  • Electricity generation: thermopile (RP2)

Most interesting for processing (i.e., distillation) is the heat exchanger, which could either a condenser (cooling) or evaporator/boiler (heating). Railcraft already has a great boiler system that we could leverage. Need a condenser.

Mass transfer (separation)

Moving chemicals from one solution/phase to another. Forms the basis of fluid filtration. See section on separation.

Mechanical

Mostly working with solids.

Solid transportation

Trust BC/AE here.

Crushing, pulverizing

Many machines already perform this for ore processing. Examples:

  • IC2 macerator (1 output)
  • TE pulverizer (2 outputs)
  • GT industrial grinder (4 outputs)

Screening/sieving

Presumably this is how the pulverizer and grinder separate materials.

Unit Processes

These are types of chemical (rather than physical) processes. These are somewhat orthogonal to machines. But we list them to make sure we support these types of chemistry:

  • redox: ore reduction in furnace, electrolysis
  • (de)hydrogenation
  • hydrolysis
  • (de)hydration
  • (de)halogenation
  • (de)nitrification
  • (de)sulfonation
  • (de)alkylation
  • esterification
  • polymerization
  • polycondensation
  • catalysis

A chemical process has an associated process chemistry, which in many cases can be represented as a system of chemical reactions. There are some cases, such as in the refining of crude oil, or food production, that specifying individual reactions would not be feasible, so some abstraction is necessary. Many chemical reactions, and chemical processes, can be autogenerated using some heuristics, but many will require manual declaration, given the complexity of chemistry.

Separation

There are different methods of separating/purifying compounds:

  • Filtration: depending on filter media, the solid/liquid equivalent of solvent extraction
  • Decantation/Settling: tanks that over time would separate solid and liquid
  • Distillation: leverage heat transfer processes to partially evaporate, then condense. The Forestry still and the brewing stand are close, but neither of them would work. Probably best to model this as a combination of heat transfer components.
  • Precipitation: would happen in chemical reactor, but then the solid phase needs to be separated.
  • Crystallization: uses a special solvent to cause one fraction to crystallize; as in Factorization’s crystallizer.
  • Centrifugation: based on differences in density, basically an accelerated version of settling. The GT industrial centrifuge is the only real existing option.
  • Sieves: difference in particle size. We can imagine that the TE pulverizer and GT grinder work this way.
  • Extraction:
    • Leaching: Dissolve some fraction of a solid (usually via a reaction); simple if water, could use the Forestry carpenter, and then boil.
    • Liquid-liquid: Relies on solubility differences b/w solvents; this would typically involve mixing another solvent into a mixture and then letting it settle. Representing multi-solvent mixtures may be complicated. Another issue is that the two solvents will likely be water and a non-polar organic solvent; organic chemistry is complicated.
  • Adsorption: sticking to a surface, as in cyclonic separation; may be too similar to filtration
  • Magnetic: could work for magnetite, otherwise…

How to model this? We could track actual phase transition temperatures, densities, particle size, etc. But that would be crazy. A more abstract model: a list of chemicals that compose a particular ore/mixture, possibly with percentages. The number of separated chemicals will depend on the number of outputs for a machine. Are the outputs always pure (simplest) or could they also be mixtures themselves? This would present opportunities for chain processing. Are some only separatable by certain techniques?

Distillation

Components of a distillery:

  • Heater/boiler (e.g., steam powered)
  • Distillation column, consisting of multiple blocks

At each level of the distillation tower, gas may be extracted and condensed. The higher the tower, the finer the separation. The boiler sits next to the base of the tower. The “bottoms” liquid can be extracted from the bottom of the tower. Optionally, a vacuum can be attached to the top, for when the temperature has an upper limit (petroleum refining). In theory, the heat gained by the condensers could be transferred to the boiler, i.e, they would take in water and emit steam, which would flow to the boiler, although the boiler would need additional steam.

Gravity-based separation

This relies on materials having different specific gravities.

Types:

Settling
A multiblock settling tank could take a mixture at the top and yield one or more solids (one from each of the bottom blocks) depending on the relative densities. The more blocks, the more liquid that can be processed. This is simpler and cheaper than spiral separation, but proceeds much more slowly. One could claim that Gregtech’s support for throwing ore into a cauldron is similar to this. Could we support automation with hoppers?
Spiral
Spiral sluice relies on gravity to accelerate materials down the incline, with the denser materials tending toward the middle. No energy required.
Centrifuge
Spins an object so that its contents separate by density through centrifugal force. This requires a lot of energy. This already exists in IC2 and GT.
Cyclonic
A cyclone of fluid (liquid or gas) is established, denser particles hit the wall and fall out. Liquid/solid separators are called hydroclones. These require liquid under pressure and thus some energy.
Shaking Tables
Shake it, denser particles fall to bottom. No need for liquid here. Requires some energy, pretty slow.
Jig Beds
Fluidized bed with pulsing water instead of shaking. Works faster than shaking tables but material will need to be dried. This is most similar to the IC2 ore washing machine.

Centrifuge recipes:

InputOutput
Monazite ClCeCl:50 LaCl:25 NdCl: 15

Leaching

Some substances are obtained through water leaching and then boiling off the water. The leaching machine will take one solid and one liquid input, and yield a liquid, fairly slowly. Depends on solubility.

InputOutput
charcoalpearl ash (K2CO3)

Froth Flotation

Desired ore is derivatized (via a collector) to become more hydrophobic. It is mixed into a bath of water (treated with lime and a surfactant like methylisobutyle carbinol), and air bubbles rise through the bath, capturing the hydrophobic ore constituents. This is mostly used for sulfide ores.

The machine would accept air (from a compressor) and the ore slurry (from mixer with collector).

Important collectors:

  • (K/S)EX (K/Na ethyl xanthate): Cu, Ni, Ag, Au extraction

Froth flotation should convert the sulfide ore to the sulfide mineral, which effectively doubles ore output. Should be possible to recover the collector.

Drying

This means removing water from an aqueous solution to yield a purer liquid from the solute. The fluid is passed over/through some matrix that reacts with the water, removing it from solution.

Electrostatic

Conductivity-based separation. Useful for small particles like mineral sands (rutile and ilmenite are conductive, the rest are not). Also, cassiterite. Requires some energy to maintain the electric field. No slurry required.

This lists some conductivity values and outlines sand processing: http://www.iluka.com/docs/mining-and-processing/mineral-separation.pdf

Magnetic

Uses a magnetic field instead of an electric field. Requires some energy for the electromagnet. Useful for magnetite ores. Advanced, high-powered separators can separate ores containing iron (like ilmenite).

See: http://pubs.usgs.gov/of/1999/ofr-99-0529/

Reactions

A chemical reactor performs some combination of these functions:

  • mixing
  • separating
  • heating
  • cooling
  • pressurizing

A key question is whether these tasks are performed by separate machines or one monolithic reactor. The most fun would be separate machines. See next sections for further discussion.

Balancing: L.R.Thorne, An innovative approach to balancing chemical - reaction equations : a simplified matrix - inverse technique for determining the matrix null space. Chem.Educator, 2010, 15, 304 - 308.

Model

We want to model the following aspects of reactions:

  • Reactions can be endothermic (require energy) or exothermic (require heat management, might explode!)
  • The feasibility and rate depend on the temperature
  • Reactions may need a catalyst

The heat released or absorbed would change the temperature according to some heat capacity. For a liquid reactor, one might use the heat capacity of water. If it boils, there will be an explosion if there is no way to pipe out the steam. The pressure exerted on the reaction vessel would be equal to the vapor pressure of the liquid.

To determine whether a reaction is feasible, we consider the sign of the free energy. This has nothing to do with how fast the reaction proceeds; it only helps to decide the trajectory of the system: which one is most thermodynamically favorable? The magnitude of the free energy is an indicator of the completeness of the reaction (how much reactant is left at equilibrium). We will assume that all reactions proceed to completeness.

The rate also depends on the temperature. This dependency is pretty simple IF we know the activation energy: ln(k2/k1) = -(Ea/R)(1/T2 - 1/T1). We could calculate that by summing the bond energies: http://www.wiredchemist.com/chemistry/data/bond-energies-lengths That would be manual. If the rate constant (k) is not known for a reaction, then we would need to assume some base rate.

Perhaps we could have a base, reasonable rate that corresponds to the temperature at which a reaction becomes spontaneous. Increases in that rate then follow the Arrhenius equation.

So in summary, we need to know:

  • The dH and dS for the reaction, computed from the Hf and S of the reactants and products
    • OR the dH and the temperature for the reaction
  • The Ea for the reaction, rate constant and order of the reaction
  • Any catalysts

Sometimes, such as in liquid extraction, the required temperature is not derivable from chemical parameters. In those cases, we need to override the reaction temperature. And there are probably many other cases where some ideal temperature is known, without knowing the kinetic parameters. That suggests at least two kinetic models:

  1. One where the rate constant, rate law and Ea are known, and we accurately model the rate by temperature, concentration, etc,
  2. One where the rate is either zero or some non-zero number, depending on the temperature.

Model inspired by actual chemistry

We want to react two aqueous solutions. The machine mixes a certain amount of each, in molar proportion. The mixing is continuous, in sub-bucket increments, so there is no complete flush of the reactor. If the reaction is thermodynamically favored at the temperature (25 C), it begins at some base rate. Otherwise, heat exchangers (as separate blocks adjacent to the reactor) are necessary for bringing the temperature up to some pre-defined target temperature. The more heat exchangers, the quicker the heating. The reaction rate will change based on the temperature, and the temperature changes according to the heat of reaction. The reator will output at the maximum rate at which it can maintain the temperature. There will be some cap on the output rate, and if heat is in excess, and there is no cooling mechanism, the temperature will increase. Once the vapor pressure of the liquid matches the pressure, it will boil. If there is no gas output, the pressure will increase until it exceeds the pressure tolerance (which depends on the construction), and there is an explosion.

Model inspired by Minecraft smelting

Smelting is the closest thing in Minecraft to a chemical reaction. In fact, it is a chemical reaction. Key differences:

  • Chemical reactions usually involve at least one fluid-phase reactant, i.e., either a liquid or a gas; the gas in smelting is produced by burning fuel (how do electric furnaces work?).
  • A chemical reaction might be exothermic, unlike the typical reduction during smelting.
  • In general, an endothermic chemical reaction will need an external heat source, because there is no burning fuel.

One similarity is that the speed of the smelting depends on the input energy (e.g., TE smelters).

So the main difference is the need to model heat and temperature. That introduces the most complications.

So how do we simplify the thermodynamics to determine the burn time for each fuel? We can equate the burn time to the amount of heat released by a fuel. That depends on the amount of fuel and the enthalpy change for the reaction at some fixed furnace temperature (say, 1000K). For the crude fuels, we provide that enthalpy change directly, in kJ/g. We assume that a block of coal is a cubic meter, we scale to a lump (1/9), and get the mass from the density. We then normalize bituminous coal to vanilla coal to get the actual burn time.

Case study

Take as an example the Bayer process for producing aluminum from bauxite. Start with the first reaction, the pressurized extraction of aluminum hydroxide from bauxite in a concentrated NaOH solution. Aluminum hydroxide is insoluble in water, but it is soluble in hot NaOH (aq), because of the reaction that converts the Al(OH)3 to NaAl(OH)4 (aq). So we could simply say that the solubility depends on the rate of that reaction. But finding chemical parameters for compounds like NaAl(OH)4 is going to be tough. And in the end, they are unlikely to predict the reality of the Bayer process. After filtering the red mud, the solution is cooled, and Al(OH)3 precipitates.

These guys wrote a whole paper on modeling this: http://www.ysxbcn.com/down/upfile/soft/20120228/32-p0447.pdf

How could we simplify this?

  • Instead of modeling the exact thermodynamics, simply state that bauxite/Al(OH)3 is “hot” soluble in NaOH, and precipitates after cooling. The ore and NaOH solution would be mixed in a heated, HP reactor. In effect, we would just be coming up with all of our own parameters.
  • Simplify this to something like induction smelting, except with a heated liquid, instead of burning fuel, with red mud as the slag. The NaOH solution could just be a bucket in the induction smelter (but we would probably want our own machine with liquid pipe support). This may be too simple. We sure as heck would not want to use the induction smelter for every one of our reactions.

We could probably do both: the underlying model understands the solubility of Al(OH)3, and that translates to specific, simplified recipes.

A tougher problem: monazite, a mixture that consists of the poorly characterized rare earth phosphates. These would need to be coded as stubs. That is better than not at all.

Reactors

The reactor will be a multi-block structure, modeled after the Railcraft tanks. Like the Railcraft steam boiler, there will be a low and high pressure version of the reactor. The high pressure boiler can super-heat liquids to cause reactions to occur at a faster rate. There will be special blocks. Here is a list of blocks:

  • Mixer block: placed in bottom, middle; crafted like gauge, except using iron gears in place of glass, redstone engine in the middle.
  • Low/high pressure structure block
    • Must be uniform, all HP or LP
    • Use iron tank wall for LP, steel plate recipe for HP
  • Glass blocks: Railcraft gauge
  • Heat transfer components
    • Recipe: like valve, but with plates and bars switched
  • Temperature gauge: like tank gauge, with redstone coil in middle
  • Pressure gauge: like tank gauge, with pressure plate in middle
  • Liquid valve: just the Railcraft tank valve
  • Gas valve: tank valve but with steel instead of iron
  • Solid dispenser: tank valve with dispenser in middle
  • Safety valve: releases gas when temperature gets too high; replace middle of tank valve with trap door?

List

Within this reaction chamber, the following reactions could happen:

Reactant AReactant BCatalystProduct AProduct BMachine
MgCl2 (sea)Ca(OH)2 (s)Mg(OH)2 (s)CaCl2 (aq)mixer
CaO (s)H2O (l)Ca(OH)2 (s)mixer
Mg(OH)2 (s)HCl (aq)MgCl2 (conc)
MgCl2 (conc)e-Mg (l)Cl2 (g)electrolyzer
Lepidolite dustH2SO4 (aq)Li2SO4 (aq)
Li2SO4 (aq)Na2CO3 (s)Li2CO3 (s)Na2SO4 (aq)heated mixer
Li2CO3 (s)2HCl (aq)LiCl (aq)CO2 (g)mixer
2LiCl (l)e-2Li (s)Cl2 (g)molten electro
2NaCl* (aq)CaO (s) + CO2 (g)NH3Na2CO3 (s)CaCl2 (aq)mixer
SO2* (g)V2O5SO3 (g)mixer
SO3 (g)H2O (g)H2SO4 (l)
2NH4Cl (s)CaO (s)2NH3 (l)CaCl2 (s) + H2O (g)still
3H2 (g)N2 (g, atmos)magnetite2NH3 (l)
2H2O (l)e-2H2 (g)O2 (g)electrolyzer
CH4 (g)2H2O (steam)4H2 (g)CO2 (g)
FeVO3* (s)NaCl/Na2CO3 (s)NaVO3 (s)furnace
NaVO3 (aq)H2SO4 (aq)V2O5 (aq)
V2O5 (aq)5Ca (s)2V (s)5CaO
CaCO3* (s)HCl (aq)CaCl2 (aq)CO2 (g)mixer
CaCl2 (l)e-Ca (s)Cl2 (g)molten electro
2NaCl (aq)e-H2 (g)Cl2 (g) + NaOH (aq)electrolyzer
Cl2 (g)H2(g)glowstone2HCl (g)mixer
NaCl (s)H2SO4 (aq)HCl (g)NaHSO4 (aq)mixer
2NaCl (s)H2SO4 (aq)2HCl (g)NaSO4 (aq)heated mixer
2NaCl (l)e-2Na (s)Cl2 (g)molten electro
Na (s)KCl* (l)NaCl (s)K (s)furnace
TiO2 (s)Cl2 (g)TiCl4 (g)furnace
TiCl4 (g)2Mg/4Na (s)Ti (s)2MgCl2/4NaCl (s)furnace
8H2S (g)4O2 (g, atmos)Al2O3/TiO2 (2x)S8 (s)8H2Ofurnace
K2CO3 (s)2HCl (aq)2KCl (s)H2O (+ CO2 atmos)mixer
2KCl (aq)e-2KOH (aq)Cl2 (g)electrolyzer
2KOH (aq)CO2 (g)K2CO3 (aq)H2O (l)
Al2O3 (s)e-cryoliteAl (s)molten electro
Al2O3 (s)6Na/K2Al (s)3Na2O/K2Ofurnace
Monazite dustNaOHMonazite OHNa3PO4mixer
Monazite OHHClMonazite ClThOHmixer
ethanol (l)NaOH (s)Na Ethoxide (aq)H2O (l)mixer
2 ethanol (l)2Na (s)2Na Ethoxide (l)H2 (g)manual
2 methane (g)sulfur:8 (s)alumina2CS2 (l)4H2S (g)hot mixer
Na ethoxide (aq)CS2 (l)SEX

Solubility

It would be simple to model compounds as being soluble by groups of solvents (polar, non-polar, etc). The problem is temperature dependency: this can be huge. Solubilities in water are fairly well known, http://en.wikipedia.org/wiki/Solubility_table. But what about other solvents? Probably best to model solvation as a reaction (a phase change). Then we just have to worry about reactions.

Interestingly, one can approximate the temperature dependence on solubility via the Arrhenius equation, where the heat of fusion (the latent heat) is the activation energy. See: http://en.wikipedia.org/wiki/Enthalpy_of_fusion

Also, we are ignoring boiling point elevation and melting point depression in solutions.

Mixing

Need a machine to mix solids, liquids and gases. Technically, this is a challenge, because it would require modeling mixtures of fluids. In theory, we could have a mixture liquid using damage. This would support up to ~16000 chemicals in binary mixtures. For arbitrary mixtures during processing, binary is probably sufficient. Ores will be more complex, but those can be modeled individually.

Types of mixers we would want:

  • combining two fluids or gases
  • dissolving a solid or absorbing a gas into a solution
  • combining a solid and fluid to a slurry
  • mixing two solid dusts

All of these take two inputs and emit one output, or two outputs when there is a solid/liquid plus a gas. The difference really are three types of input: two fluids, two solids or a fluid and a solid. These correspond to liquid agitators, dust blenders and fluidizing beds, respectively.

Temperature

Fluids will need to be heated and cooled. If a reaction occurring in a mixture releases or requires heat, then cooling or heating must be applied to the reaction chamber. One type of heater would be a simple electric heater, but heat transfer devices would be more efficient. Steam/water could be piped into the heat transfer device, and they would emerge in a cooled or heated form (steam would become water, water steam). Heat exchangers are typically made from stainless steel, as well as Cu/Ni and Ti.

Internally, we can model any temperature. But externally, we should model substances at two temperature levels: ambient and “hot”. Might also need “cold”.

The reaction chamber would need some temperature limit. If the temperature exceeds the limit, bad things happen.

Pressure

Modeling pressure means modeling the atmosphere inside the reactor. There is some atmosphere inside the chamber. When the vapor pressure exceeds the internal pressure, gas from evaporation changes the pressure.

Vapor pressure

This is via the Antoine equation, which requires three constants. For mixtures, we can use the weighted average via Raoult’s Law. We only have the Antoine coefficients for common liquids; should be sufficient. In fact, might as well assume water for now.

Evaporation rate

This is Langmuir’s approximation: dn/dt = (pv - p)*sqrt(1/(2*pi*R*T))

Communition

This is breaking down the ore and performing simple, typically gravity-based separations. It corresponds to the crusher/pulverizer steps in most mod processing chains.

Single stage design

  • The primary component of an aggregate should yield a block. If that is the only component, yield 2 blocks.
  • Ore materials should yield two dusts of primary composition. And additional dusts with chances matching the proportions.
  • If there are more components than handled by the machine, start from the first.

Two-stage design

  • The first stage is crushing, while the second is pulverizing. Many mods already make this distinction. Even if the machine is called a pulverizer (or crusher), it is the input that determines the operation.
  • ore =crush=> 2 x crushed_ore + host_dust =pulverize=> dust + extras.
  • cobble =crush=> 1 x rubble =pulverize=> sand + extras.

Since the crushed ore is smeltable just like the dust, this means that the first step effectively doubles ore production, while the second step allows access to additional components. One concern is that machines with more outputs have greater yield. This may not be balanced, since the cost of machines is likely not correlated with number of outputs. But there is no way we can address that.

Electrolysis

Electrolysis will reduce just about anything. If we know the chemical formula of the substance, we can easily calculate the product of redox reactions.

Chloralkali process

Produces NaOH (aq) and Cl2 (g) from NaCl (aq). This happens in a membrane cell. This could be a multiblock structure that would essentially be two reactors combined, separated by a thin ion-selective membrane. Each reactor would have an electrode.

Electrowinning

A more complicated form is electrowinning/refining. This requires dissolving the metal in H2SO4 and performing electrolysis. The anodes would be need to be transferred to a grinder for recovery of the metals. This means that electrodes need to be continually manufactured and replaced; perhaps every 10 buckets of electrolyte. A number of minor outputs are possible from grinding the dust.

Smelting

Types of smelting:

  • Roasting/calcining: conversion of sulfide and carbonate ores to oxides. This occurs at low temperature; any furnace is capable.
  • Reduction: conversion of oxide to elemental metal. Requires reducing agent like coal or sand.

Furnaces and smelting is central to Minecraft, so we do not want to change that dramatically; however, we could add more sophisticated smelting options, with higher yield.

Some types of furnaces:

  • Electric arc: passes an electric current through the material, reaching temperatures of about 2000K, mostly for steel making.
  • Blast furnace: reduces metal, usually iron, by blasting air up through the furnace; with a pre-heated blast, can reach temperatures up to 2500K; can also produce rock wool from diabase rock.
  • Induction furnace: induces current in metal using an electromagnet; used for melting metals.
  • Bath smelting: blows O2-enriched air into a bath of slag at the bottom; useful for smelting sulfide ores.
  • Flash smelting: sulfide ore is mixed with O2, ignited, sulfur is produced as a solid, rather than SO2.

Possible reduction progression (ingot:ore/dust):

  • Vanilla furnace and other simple furnaces (1:1)
  • Induction smelter (1:1 + slag), requires coal/sand, lower energy
  • Industrial blast furnace Fe only (2:1 + 2 slag), requires coke, limestone flux and air input; oil, tar, natural gas can be added to the coke to lower energy requirements (and increase speed). GT has since added something with this name.

Possible roasting progression:

  • Vanilla furnace and other simple furnaces (1:1)
  • Fluidized bed roaster: twice as fast (2:1), requires air to be pumped into the chamber

Chemical/thermodynamic considerations of smelting:

  • After roasting/calcining, any sulfide, carbonate, or hydroxide ores have been converted to oxides.
  • A reducing agent is necessary, because the temperature required to achieve thermodynamic feasibility would be impractically high for many metal oxides, even with positive entropy change of O2 gas production.
  • Carbon is the typical reducing agent, because its oxidation to CO2 is favorable, especially at high temperatures; by combining the metal-producing reduction step and CO2-producing oxidation step, the overall process becomes favorable.
  • There is one complication: some metals react with carbon to form carbides. This includes Cr, Al, …
  • This can be solved by using metals with less favorable reduction potential, i.e., metals that want to be oxidized more. An example is oxidizing Al to reduce the oxide of Cr. Note that while this favorability holds true for a large range of temperatures, there is a high activation energy that requires some initial ignition. See the notes on the aluminothermic reaction – we need a charge in a crucible, not a smelter.
  • By registering carbide reactions, we can avoid adding smelting recipes for them.
  • But for Al, we need to rely on electrolysis, and that is tricky.
  • Otherwise, we will use thermodynamic considerations to determine the smelting temperature, and could even allow reducing agents other than carbon in a principled way.

Reactivity could give us:

  • Rough decomposition temperature of hydroxides, carbonates and nitrates
  • Reduction potential (electrolysis vs. smelting)
  • Reactivity with water, acids
  • Single displacement reactions

Some of that could be derived from thermodynamics, but the reactivity also includes some notion of kinetics.

Possible breakdown:

Low
Ge Sb Bi Cu Hg Ag Mo As Pt W Au
Medium
Mn Nb V Zn Cr Ta U Fe Cd Co Ni Sn Pb (H)
High
Li Ba Sr Ca Mg Be Al Ti (C)
Very High
Cs Rb K Na

But for some things, like reduction and single displacement, we need an actual ordering.

Decomposition temperature by reactivity for each type of compound:

CompoundLowMediumHighVery High
CarbonatesLowLowMed/High/VHighNA
Sulfates
Nitrates
HydroxidesLowLowNA

See this for thermal decomposition: http://www.docbrown.info/page07/sblockb.htm#11.

Smelting energy depends on the necessary temperature.

Blast furnace details

Reference: http://www.steel.org/Making%20Steel/How%20Its%20Made/Processes/How%20a%20Blast%20Furnace%20Works.aspx

Process

The blast furnace will accept ore, flux (limestone) and fuel (coke) from the top, and accept heated, compressed air (the blast) from the bottom, potentially with oil, natural gas, tar, powdered coal and/or oxygen to increase the heat. The mixture accumulates at the bottom of the furnace, where air is blown, optionally (for higher efficiency) heated by cowper furnances, through special pipes called tuyeres, which are made of copper and cooled with water. The tuyeres are located at the base of the furnace. Coke near the tuyeres is ignited, producing heat and CO. The heat and CO rises up through the stack of limestone and ore, converting the limestone to slag and the ore to liquid iron, which settles in the space below the tuyeres. About 40% of the CO is converted to CO2 by the reactions on the way out of the furnace. This “dirty gas” exits the furnace at the top.

A cowper stove is a simple regenerative heat exchanger via convective heat transfer, where the dirty, hot gases escaping the top of the furnace heat refractory bricks that then transfer their heat to convert the cold blast to a hot blast. There must be at least two (usually three) stoves, because there is only one gas flow. First, the top gas is passed through to heat the bricks, then the blast air.

The limestone flux is important for capturing silica before it is reduced to silicon. The limestone is converted by the heat to calcium oxide, which reacts with silica to form the slag, calcium silicate (CaSiO3).

The flue gas contains mostly CO, CO2 (from the reduction) and N (from the air).

Chemistry

The temperature needs to be carefully maintained at each level of the furnace, so that the desired reactions are favored.

The initial burning of the coke produces CO2 (and heat), but the CO2 is immediately reduced to CO by the excess of C: C + O2 => CO2 + heat CO2 + C => 2CO

At the level of 1600 C, limestone decomposes to form CaO that cleans out the sulfur: CaCO3 => CaO + CO2 FeS + CaO + C => CaS + FeO + CO

Near the top of the stack, at 850 C, hematite is reduced to magnetite by CO: 3 Fe2O3 + CO => CO2 + 2 Fe3O4

Further down, magnetite is reduced starting at 1100 C: Fe3O4 + CO => CO2 + 3 FeO

The reduction finally completes starting at 1300 C (bosh): FeO + CO => CO2 + Fe

The liquid iron is actually a mixture that contains about 4% C, which makes it “pig iron”.

Structure

The typical overall shape is something like 3x10, up to 5x15, but any size is supported as long as there is room for the process. The more blocks, the more ore is processed at once, and the more blast that is required.

The structure will consist of structural blocks, plus these special modules:

Tuyeres
Bottom, the more tuyere nozzles, the hotter/faster
Iron notch
Bottom, for releasing the molten iron
Cinder notch
Bottom, for releasing slag and iron (later separated by a skimmer unit)
Hoppers
Top, deposit the “charge” of ore, flux and coke
Uptake valves
Top, through which dirty gas exits

The structure must be cuboid. The larger, the more ore that can be smelted at once.

Here are some details on the blast furnace structure: http://ispatguru.com/refractory-lining-of-blast-furnace/

There are several levels:

Throat
reduction of Fe2O3 to Fe3O4 @ 850 C,,
Stack
reduction of Fe3O4 to FeO @ 1100 C,
Belly
reduction of FeO to Fe @ 1300 C,
Bosh
where the coke is burning, and slag is forming, iron is melting,
Hearth
where the liquid iron/slag collects, below the tuyeres

The top (throat and stack) of the furnace could consist of simple firebricks. A firebrick consists of blocks of a vitrified fireclay, which is essentially kaolinite, i.e., a mixture of alumina and silica. The more alumina (from bauxite), the better.

Kaolinite and bauxite would be ground up, pulverized and mixed 2+2=4 to create a mixture that is calcined to firebricks. Refined alumina can be combined with ordinary clay 2+2 to yield a mixture that also smelts to (4) firebricks. Seared brick and infernal brick would also be allowed.

The belly of the furnace could be lined with silicon carbide (calcined quartz sand and carbon) bricks, bonded with silicon nitride. Or corundum-based bricks. These would consist of mullite + brown corundum (http://www.alteo-alumina.com/en/corundum) + SiC + SiN3 binder. Mullite is essentially kaolinite fired at high temperature (1400 vs. 950 C, coke oven?), or the electric furnace fusion of alumina (bauxite) with silica (quartz sand). Infernal brick would also be allowed.

The bosh layer, where the fire is the hottest, would consist of the same types of blocks from the belly, plus the tuyere blocks, which are constructed with either corundum, SiC, or carbon bricks, described below.

For the very base of the furnace, one needs carbon bricks, as described here: http://ispatguru.com/carbon-blocks-used-for-blast-furnace-hearth-lining/

Basically, a mixture of carbon-based materials. Pulverized coal/petroleum coke, or calcined anthracite, and/or graphite are bound (by baking) with coal tar (extra heavy oil), bitumen or some sort of phenolic resin. Recipe would be pulverized coal/pet coke or calcined anthracite + graphite + SiC + 1 binder (bucket of extra heavy oil, bitumen or phenolic-formaldehyde resin), yielding something that bakes to one brick block. Phenolic-formaldehyde resin (PF) is a simple polymer that forms when phenol and formaldehyde are heated together.

Air blowing

Methods of blowing the air:

Bellows
air cavity that is expanded and compressed; typically manually, perhaps by water wheel
Blowing engine
steam engine that drives air pumping cylinders; no longer in use
Centrifugal fan
fan with impellers that push air; also called turbo blowers

Implementation

Implementation is dependent on the currently loaded mods, see mod integration section.

Pyrolysis

Another type of cooking is pyrolysis, thermal decomposition without combustion: http://en.wikipedia.org/wiki/Pyrolysis. We could use the coke oven for this. If a distillation tower is employed to separate the products, we have destructive distillation.

Destructive distillation

Here is one recipe: Coal => Coke + NH3 (l) + coal tar (l) + coal gas This will not work in the coke oven, obviously, because coal directly yields creosote oil. Perhaps we could distill (using the Forestry still) creosote oil to yield NH3?

More: wood => charcoal + guaiacol + tar + terpenes + turpentine + methanol bituminous coal => coke + naphthalene + anthracene + pyrene rubber => isoprene compost/plantballs => biochar + NH3

Roasting

Cooking with very hot air, typically to convert sulfide ores to oxide ores.

Ore processing

More complex chemistry happens when extracting metals from ore. Preprocessing of mineral ores involves these unit operations:

Comminution
Simply grinding/pulverizing, converting the ore block to the ore dust
Sizing
Selecting the particles by size; could be simple screens or could rely on different settling velocities (things like cyclones and trommels). We can probably ignore this step.
Concentration
Concentrates the mineral in the ore, effectively converting the ore to the mineral. Concentration is complicated, and there are many methods (see separation section):
  • Gravity/density-based
  • Chemical, e.g. froth-flotation
  • Electrostatic (for mineral sands)
  • Magnetic (mostly for iron-containing minerals)
Dewatering
If a slurry is formed during separation, the water needs to be removed. Perhaps by filtering, sedimentation, or drying (requires more energy).

The rest of this section describes how each specific ore can be processed into economic material.

Magnetite

Iron

Typical smelting of oxide ores.

Vanadium

Vanadium is typically isolated from magnetite and ilmenite ore, and some times carnotite (uranium) ore. It can also be extracted from flue dust of heavy oil, phosphate ore slag and bauxite. Here we focus only on extraction from magnetite.

In the induction smelter, magnetite ore + sand => iron + magnetite slag. That slag is then resmelted with sodium carbonate/chloride/sulfate, or lime at 850 C to produce crude NaVO3 dust. This is leached with water and ammonium vanadates are precipitated with ammonia. The ammonia is decanted and the precipitate is roasted to V2O5. To get elemental vanadium, we need to smelt V2O5 with CaCl2 or aluminum dust. Thus, the overall process is smelt, smelt, leach/precipitate/decant, roast and smelt.

Limonite

Iron

Basic smelting, 1250 C.

Nickel: yellow limonite only

High temperature (250 C) leaching of ore with sulfuric acid precipitates the iron as hematite. The NiSO4 can then be precipitated as a sulfide with H2S gas treatment (100 C). At this point, the sulfide could be roasted and smelted like pentlandite to yield Ni. If cobalt is desired, the sulfides need to be redissolved as sulfates by treatment with pure O2 at high temperature. Solvent extraction with Cyanex 272 separates the cobalt in the organic phase. The sulfates can then be reduced via electrolysis or H2 gas.

Another idea is to reduce the metal sulfides and add Cl2 or ozone to oxidize the Co to Co(OH)3, which is insoluble in acid. Say about 20 buckets of Ni extract for one Co ingot.

Chalcopyrite

Copper

1x
ore =smelt=> 1*copper_ingot
2x
ore =crush=> 2*ore_crushed =smelt=> copper_ingot
2x
ore_crushed =grind=> ore_dust =smelt=> copper_ingot
4x
ore_dust =float=> 2*chalcopyrite_dust =smelt=> copper_ingot

The iron impurity requires us to smelt with silica to separate the iron in the slag phase. The output of smelting is then copper, iron-rich slag, and SO2. Like most sulfide ores, concentrating by froth flotation enables 6X efficiency.

Cobalt

The copper oxide is dissolved in sulfuric acid, and the cobalt is CoSO4. The copper is electrolyzed, and NaOH is added to the spent electrolyte to precipitate Co(OH)2, which is electrolyzed to Co. Lets say 20 buckets of spent electrolyte are required for one Co ingot.

Molybdenum

After froth flotation, perform another flotation with NaHS added, which keeps copper from frothing, thus separating the molybdenite, which is processed as normal.

Minor: Silver, Gold, Platinum, Selenium, Tellurium

Electrorefining of blister copper. The copper gathers at the cathode, while the noble metals are deposited as the “anode slime”. The Ag, Au, Pt, and Cu form compounds with Se and Te, which are reduced by roasting at 500C in the presence of Na2CO3 and air. So for Te:

M2Te + O2 + Na2CO3 -> Na2TeO3 + 2M + CO2

The sodium tellurite is then leached with water, and adding sulfuric acid precipites the tellurite as TeO2, which can be reduced with electrolysis, or by adding SO2 to aqueous TeO2.

Antimony

Pentlandite

Nickel

Typical sulfide ore extraction.

Cobalt

The same as with chalcopyrite.

Minor: Silver, Gold, Platinum, Selenium, Tellurium

See chalcopyrite.

Sphalerite

Zinc

As with all sulfide ores.

Cadmium

Fractional distillation, or: Crude zinc oxide (after initial roasting) is treated with H2SO4, and seeded with zinc dust to precipitate metal impurities, which are filtered out. An excess of zinc dust is added to precipitate CdSO4. That is redissolved in H2SO4 and electrolyzed with Al(+) and Pb(-), and Cd is deposited at the cathode.

Gallium

Crude zinc oxide is treated with H2SO4 to yield various sulfates. Neutralizing the solution precipitates the iron, aluminum and gallium sulfates. Treatment with NaOH brings the aluminum and gallium back into solution. Neutralization precipitates, and HCl treatment produces gallium and aluminum chloride. GaCl3 is dissolved in ether, treated with NaOH and electrolyzed to produce Ga.

Germanium

GeS2 is roasted with GeO2, and the Zn and Ge are extracted with sulfuric acid. The solution is neutralized to precipitate only GeO2. This is converted to GeCl4 by Cl2 gas or HCl, and the GeCl4 is purified by distillation. GeCl4 is hydrolyzed back to GeO2, which is reduced with H2 or C to Ge.

Indium

Galena

Lead

Like any other sulfide ore.

Silver

TE pulverizer already yields silver dust from lead ore.

Antimony

Vanadium (vanadinite)

Just like with magnetite, roasted (850 C) in presence of Na2CO3 or NaCl to produce sodium metavanadate.

Spodumene

Lithium carbonate

Treat with H2SO4, roast, leach with water and precipitate with Na2CO3.

Lepidolite

Lithium

Like spodumene => Li2CO3. See lepidolite ore dust reaction.

Caesium

Need to figure this out.

Rubidium

Dolomite

Magnesium

Ground dolomite is roasted in the presence of ground FeSi to produce a mixture of CO2 and Mg gas, as well as CaSiO3 (wollastonite) mixed with iron dust. Distillation tower separates and condenses the Mg.

FeSi results from induction smelting sand and iron (maybe an iron nugget, because the ingot recipe already exists).

Calcium

Rock salt

NaCl

Just grind it up.

KCl

Dissolved in brine and heated, so that the KCl and NaCl are enriched in a solution. Heat transfer pipe cools the solution, and the steam can be used for the heating of the brine. The cooling causes the KCl to precipitate. This is separated through e.g. centrifugation (settling will not work, because the NaCl will precipitate). The left over solution can serve as the brine in the initial step.

Or aminate the KCl and use froth flotation.

Carnallite

This is MgCl2*KCl*6H2O, i.e., MgCl2 and KCl complexed by water. Dehydration (in a dryer), followed by melting the MgCl2 (but not the KCl) at 700-750C leads to separation of MgCl2 and KCl, with a small amount of MgO produced through hydrolysis. The MgO can be converted back to MgCl2 through chlorination during melting (MgO + C + Cl2 => MgCl2 + CO/CO2, worth it?).

Limestone/Marble

Calcium

Electrolysis of CaO (roast product of CaCO3) or aluminothermic reaction, which involves the reduction of CaO with Al, under high temperatures. These temperatures are typically attained by surrounding the CaO/Al charge with a mixture of Mg and BaO2.

Something like: 3CaO + 2Al => Al2O3 (slag) + 3Ca

Could allow crafting of an aluminothermic charge (Al+Mg+BaO2). It would be placed in a fired clay crucible and ignited with flint and steel. There will be flames; nearby things could burn.

BaO2 comes from oxidizing BaO (roasting or O2 absorbtion), and BaO results from heating BaCO3 with carbon. BaCO3 is formed by heating (60-70 C) BaS (barite) with NaCO3 (soda ash). Or heated CO2 absorbtion. The absorbtion would need to happen in a mixer, while the other recipes could be handled by the induction smelter.

Skarn

Calcium

Uraninite

Uranium

Most uranium ores (UO2) are acid leached with sulfuric acid, which might be preceded by roasting.

The uranium is extracted from the sulfuric acid leach via liquid/liquid extraction, with the solvents di(2-ethylhexyl) phosphoric acid and a secondary/tertiary amine (2.5% amine, 2.5% isodecanol and 95% kerosene) as the solvents.

Kerosene comes from oil refining, but the tertiary amine that reacts with uranium would be complicated to synthesize. For simplicity, let us aim for only ethyl or methyl amines. Those can be synthesized from ethanol/methanol and ammonia using a zeolite catalyst.

Reference: https://publications.csiro.au/rpr/download?pid=csiro:EP112117&dsid=DS3

Anyway, the acid leach is treated with ammonia, which precipitates yellowcake: (NH4)2U2O7. There are other types of yellowcake, like UO3 and U3O8. (NH4)2U2O7 thermally decomposes to UO3 at 500 C. This in turn decomposes to U3O8 at 750C.

Anyway, for enrichment, yellowcake must be refined by treatment of (NH4)2U2O7 with nitric acid to yield UO2(NO3)2. Uranium is extracted from the solution using two solvents: tributyl phosphate and kerosene. This yields a purified UO2(NO3)2. It should be noted that during reprocessing of nuclear fuel, fuel rods can be dissolved with HNO3 to UO2(NO3)2.

This is converted to UO2 via thermal decomposition at 500C to yield UO3, which is reduced with H2 gas to UO2. This is the ceramic form of unenriched uranium, and it is useful for fuel rods and heavy-water reactors.

The UO2 is treated with HF to yield UF4. To produce U metal, use magnesium/calcium/aluminum thermite reduction (essentially UF4 is enveloped in a Mg charge that is ignited in a crucible; highly exothermic). Ignition occurs between 500-700 C and reaches in excess of 1300 C. The slag is 2MgF2.

For enrichment, the UF4 is instead oxidized with fluorine to UF6 and enriched for 235 by fractional distillation or one of the other enrichment methods. UF6 then is brought back to UO2 by reacting as a gas with water vapor to UO2F2-H2O, which is reduced with H2 gas to UO2.

Vanadate

After treating ore with the tertiary amine, mix with the sodium carbonate and follow the steps for magnetite. This is actually the mineral carnotite, which is probably associated with uraninite.

Chromite

Ferrochromium

Smelt with coal at high temperature (2800 C); lots of energy. As a reference, iron is smelted around 2000 C.

Magnesite

Magnesium

Calcined to MgO (magnesia), which is then smelted with Si in induction furnace to produce Mg (s) and SiO2 (sand). Could be combined into one step.

Rutile

Refining

Rutile is TiO2. It is refined by mixing in a fluidized bed at 900C with Cl2 to make TiCl4 (caution: exothermic), fractionally distilling it and then oxidizing TiCl4 back to TiO2 in a pure O2 flame (caution: exothermic, the Cl2 gas can be recovered).

Titanium

See the reactions for TiO2.

Ilmenite

Titanium

Convert to TiO2 (rutile), then follow the listed reactions. TiO2 is produced by treating ilmenite with sulfuric acid at 100C (Ea 64 kJ/mol), which separates the iron as FeSO4. The FeSO4 is crystallized and filtered out. This requires a settling out the liquid FeSO4 and then cooling it to a solid. The solid phase in the settling tank is washed to obtain TiOSO4. That is hydrolyzed (boiled) to hydrous TiO2, which needs to be roasted to pure TiO2.

Garnierite

Nickel

Simply smelt it. In an induction furnace, include a sulfur source, like gypsum, for flux.

Or perhaps more realistic are hydrometallurgical processes, by which metals are leached with sulfuric acid at 250C and high pressure (or wait 3-4 months!). The leach solution is neutralized with limestone, and the precipitated Ni hydroxide is roasted to NiO and smelted.

Cassiterite

Tin

From smelting.

Niobium/Tantalum

Wolframite

Gravity concentration.

Tungsten

WO3 is reduced at 800C with H2 (producing steam). Getting to WO3 is more complicated. Mix ore with aqueous soda ash, add ammonia to form ammonium para tungstate (APT), which precipitates (after boiling off the water) and is calcined to WO3.

WC (tungsten carbide)

Induction smelt tungsten ore with coke.

Scheelite

Concentrated by froth flotation.

Tungsten

The same as wolframite.

Cinnabar

Mercury

http://mysite.du.edu/~jcalvert/phys/mercury.htm#Prod Looks like it is found only in fine-grained massive forms, so very little metal will be obtained per ore. The ore is roasted, and mercury is distilled from the vapors.

Bauxite

Aluminium

Dissolved in concentrated NaOH (aq) at 150-200 C (in pressure vessel) to yield aluminate. The red mud is filtered out, and Al(OH)3 is precipitated by bubbling CO2 through the solution (neutralizing the NaOH with carbonic acid). That is calcined to become Al2O3. Cryolite is added as a flux and the mixture is melted at 1000 C. Then electrolysis yields Al (s).

Simplified, the formation of aluminum hydroxide is just:

Al2O3 + NaOH + 3 H2O → 2 Al(OH)3 + NaOH

so the NaOH is more like a catalyst and is unconsumed. Water is very much in excess but could be required for consistency reasons.

With GT, that might be:

  • Bauxite + NaOH (unconsumed) + 3 H2O =reactor=> Al(OH)3
  • 2 Al(OH)3 =furnace=> Al2O3 (two small dusts?)
  • 2 Al2O3 + cryolite (molten, unconsumed) =electrolysis=> 4 Al + 3 O2

Cryolite is Na3AlF6, which can be synthesized as: 6 NaOH + Al2O3 + 12 HF → 2 Na3AlF6 + 9 H2O

Note that the cryolite is not consumed in the process.

This will require some special machine, a smelter/electrolyzer, that requires less energy than using straight electrolysis.

See http://www.3rd1000.com/chem201/chem204l.htm for how Al was produced before the above process was invented. The reactions are:

2Al2O3 + 6Cl2(g) + 3C => 4AlCl3 + 3CO2 AlCl3 + Na => 3NaCl(s) + Al

Gallium

Gallium can replace Al in gibbsite, Al(OH)3. Ga(OH)3 ends up in solution with Al(OH)3. Even after precipitation of the aluminum, there is still too much aluminum in the solution. This is removed by either adding CaCO3 (precipitating the Al as CaAl(OH)5?) or by passing CO2 through the solution to neutralize it and precipitate Al(OH)3. The concentrated gallium solution is electrolyzed to produce Ga.

Red mud

In theory, one could mix the mud with coke and and smelt with an electric arc furnace. The Fe2O3 is converted to pig iron. The slag could be made into rock wool. This is not cheap but is barely economically viable.

Zircon

Separated from sand using spiral separators. The rutile and ilmenite are removed by magnets.

Zirconium

Same process as for rutile=>titanium.

Stibnite

Antimony

Much like other sulfide ores. Enriched with froth flotation, roasted to oxide, then reduced in an induction smelter with coke. Or directly induction smelted with Fe, producing Sb and FeS slag.

Borax

Boron

Three methods, increasing purity:

  • Smelting of B2O3 with Mg or Al. The B2O3 is obtained by treating borax with H2SO4 in a fusion furnace (750 C).
  • Reduction of volatile boron halides with H2 at high temperature.
  • Thermal decomposition of diborane.

Pyrolusite

Manganese

Reduction with sodium, magnesium, or aluminum. Electrolysis.

Pollucite

Caesium

Caesium is highly reactive, with both water and air. Seems like this is mostly produced during Li production, but here are some options:

Acid digestion

Add Hcl to eventually yield CsCl (evaporate water). Analogous reactions happen with HBr and HF.

Or add sulfuric acid => caesium alum, induction smelt with coke and leach with water to yield Cs2SO4 (aq). This could be used for caesium formate production.

CsCl is reduced at 700-800C with Ca or Ba in induction smelter.

Alkaline decomposition

Induction smelt with mixture of CaCO3 and CaCl2, leach with water to yield CsCl.

Direct reduction

Induction smelted with Na, K or Ca metal (expensive, maybe consumes twice the metal).

Electrolysis

Elecrolyze CsCN. How to get this?

Thermal decomposition

Cook CsN3 at 400C. Seems complicated. Should increase yield. Relevant reactions:

2 CsSO4 + Ba(N3)2 → 2 CsN3 + Ba(SO4)2 2 NaN3 + BaX → 2 NaX + Ba(N3)2 2 NaNH2 + N2O → NaN3 + NaOH + NH3 2 Na + 2 NH3 → 2 NaNH2 + H2

Rubidium

The caesium alum can be fractionally crystallized to yield tiny amounts of rubidium.

Bastnasite

Cerium

Treated with H2SO4 to make water soluble sulfates. NaOH is added and thorium hydroxide precipitates. Ammonium oxalate precipitates rare earths as oxalates. They are heated to oxides and dissolved in HNO3, leaving behind insoluble cerium salts. Those can be induction smelted with Ca or melted and electrolyzed.

Oxalic acid: NH4OH + oxalic acid -> ammonium oxalate glucose + HNO3 (or air) –V2O5–> oxalic acid

Nitric acid:

  • Large scale at 500K, pressurized air for O2: 4 NH3 (g) + 7 O2 (g) → 4 NO2 (g) + 6 H2O (g) [platinum/Rh catalyst] 4 NO2 (g) + 2 H2O (l) → 4 HNO3 (aq)
  • Small scale: 2 NaNO3 (s) + H2SO4 (aq) → 2 HNO3 (aq) + Na2SO4 (s)

NaNO3 is produced from NH3, perhaps via HNO3 (air with platinum catalyst, 700-850 C). 2HNO3 + soda ash => 2NaNO3 + H2O + CO2. There are other ways, like via NH4NO3. Should also be obtainable from RC saltpeter (various nitrate salts).

Tantalite

Gravity separation.

Tantulum/Niobium

Treated with HF to yield complex fluorides. Those are separated by liquid extraction, with water/cyclohexanone as the solvents. Both niobium and tantalum are extracted. The tantalum (or niobium) fluoride is precipitated by addition of KF, and the result is reduced with molten Na.

Cyclohexanone results from oxidizing cyclohexane in air with Co catalyst. Cyclohexane results from reducing benzene. This means mixing gaseous benzene and H2 with a Pt or Raney Ni catalyst under high temperature. Cyclohexane is then condensed.

Benzene results from oil refining.

Molybdenite

Molybdenum

Like any sulfide, it is roasted to an oxide at 700C. It can then distilled (sublimated at 1100C) or dissolved in ammonia. To get molybdenum metal, reduce with H2 gas.

Ferromolybdenum for steel

Aluminothermic reaction w/ the purified oxide and iron.

Rhenium

Rhenium oxide is filtered from the gas during roasting, leached with water and treated with NH4Cl to precipitate ammonium perrhenate. It can be reduced with hot H2 gas.

Malachite

Copper

Smelt it.

Glauconite

Fertilizer

Smelt, and leach with HCl to make KCl.

Alunite

Alum

Calcined at low heat, leached with water, evaporated.

Potassium

Roasted at 1000C to produce K2SO4 and Al2O2. The K2SO4 is water soluble and can be leached off, filtered and the water is evaporated.

Aluminum

Alumina is the filtrate after roasting and water leaching.

Fluorite

HF

Dissolve in H2SO4. CaF2 + H2SO4 → 2 HF + CaSO4 HF is also a by-product of making phosphoric acid from apatite.

Cryolite

See Bauxite section.

Graphite

Graphene

Barite

Barium

Like any sulfide ore (froth flotation, etc). Except if induction smelted with aluminum or silicon dust, the yield is doubled.

Celestine

SrCO3

Two methods:

Direct leaching
Leach with Na2CO3.
Black ash
Induction smelt with coal dust to 2 black ash, leach SrS with hot water, treat with Na2CO3/NH4CO3. This doubles yield vs. direct leach.

Strontium

Produce 2x SrO dust by induction smelting SrCO3 with coal dust. Roast that to Sr. Or smelt SrCO3 directly for one yield. Or directly smelt SrSO4, which consumes a lot of energy and offers no gain via the black ash method.

Apatite

Beneficiation: after grinding, purify through froth flotation after coating with fatty acid (doubles yield).

Fertilizer

Fertilizer needs to provide some combination of three nutrients: nitrogen, phosphorous and potassium.

Pure phosphorous fertilizer is phosphate, P2O5, but it is typically combined with NH3 for N+P fertilizer. Treat with H2SO4, separate out resulting gypsum and H3PO4. Neutralize H3PO4 with NH3. Yields 2 fertilizer per dust.

Alternative for N+P: treat apatite with HNO3 to make H3PO4 and Ca(NO3)2 mixture.

Pure N fertilizer is typically NH4NO3, formed by treating NH3 (g) with HNO3 (aq). And then dried. The reaction is extremely exothermic.

For K, simply add KCl (2 NP fertlizer + 1 KCl -> 3 NPK).

Arsenic sulfides

Many sulfide ores contain arsenic sulfide minerals like realgar and arsenopyrite. These volatilize upon roasting of the ore at 500-800C. The gases are burnt in O2 to produce As2O3, which is condensed at ~100C, leaving SO2 in the gas phase.

Arsenic

Arsenic metal results from reduction of As2O3 with carbon at 500-800C. This has to be done in the absence of air (coke oven), because the As oxidizes readily when heated.

Beryl

Coal

There are three main types of coal that represent increasing stages of metamorphosis from peat:

  • Lignite
  • Bituminous coal
  • Anthracite

As one progresses from lignite to anthracite, the amount of fixed carbon increases compared to the impurities of moisture (water), volatiles (aliphatic and aromatic hydrocarbons), ash (rock), and sulfur.

The breakdown is something like:

CoalMoistureVolatilesAshFixed Carbon
Lignite40%25%5%30%
Bituminous15%15%10%60%
Anthracite0%0%10%90%

The volatile fraction should be lighter in lignite than bituminous coal.

Then we can process it: http://sophiadacycole.com/wp-content/uploads/2014/04/coal_tree_USGS.jpg

Pyrolysis of coal yields coke and tar. Unfortunately, the Railcraft coke oven yields creosote oil as the liquid fraction, instead of tar. Creosote is a distillation product of tar. Depending on the process, different ratios of gas (CO, H2, CH4, etc) are released.

Some options:

  • We could replace that recipe with one that yields tar, and then add a recipe for the Forestry still that yields creosote from tar. But that depends on Forestry; eventually we would have our own, multiblock still.
  • Introduce lignite as its own item, and have it yield tar in a coke oven, along with coke, but take more time. Anthracite would be a direct coke replacement.
  • Just replace coal entirely with lignite, bituminous coal and anthracite.

The heat value of the coal depends on the carbon content. While both lignite and bituminous coal produce coke, it takes longer for the lignite, due to the additional moisture. While we could add lignite coke, which would be smaller than ordinary coke, we just yield one type of coke for simplicity (they have the same composition). One could argue that we just start with more lignite, which still has a lower heat value due to the moisture.

Good reference for relative heat contents: http://www.euronuclear.org/info/encyclopedia/coalequivalent.htm

Upgrading: lignite can be upgraded to bituminous coal by drying in a rotary kiln.

Oil and natural gas refining

This is the most complex chemical process. Many materials will be derived from petroleum.

Here is a good book: “Petroleum refining in nontechnical language”. Available from the Palo Alto library.

For chemistry, Google Books has this: “The Chemistry and Technology of Petroleum”

Resources

Oil can be found in liquid deposits, or can be produced from kerogen-rich oil shale, with veins of so-called liquid “tight” oil. Oil shale also contains pockets (perhaps vein-like fractures) of natural gas (called shale gas). Alternatively or in addition, shale could yield shale gas by chance when broken (like gravel yielding flint). However, most natural gas occurs in isolation or in association with oil (above).

Natural gas is mostly methane (95%), with some amount of ethane (3%), and propane (0.2%).

There are about 150 types of crude oil on the market, typically classified along two axes: heavy/light (density) and sweet/sour (sulfur content). The two variables are correlated: the heavier, the sourer. Extremely heavy/thick oil is called bitumen. The chemical composition can also vary. Hydrocarbons up to C4 (butane) are usually dissolved gas (natural gas).

With regard to shale, while tight oil is light, shale oil probably falls under the “extra heavy” category.

From this we could come up with this composition for each type:

TypeAlkanesNaphthaAromaticAsphaltH2SOccurrence
Light50%45%5%0%0.5%10%
Medium40%48%10%2%0.75%20%
Heavy30%50%15%5%1%15%
Extra heavy15%45%30%10%2%25%
Oil sand10%20%50%20%3%30%

Densities from light to extra-heavy: 0.8, 0.9, 1.0, 1.1

But that is just chemical composition. In terms of crude fractions and products:

TypeFuel gasL NapthaH NapthaKeroseneLGOHGORes
Light10%40%30%10%5%0%5%
Medium5%15%35%20%10%5%10%
Heavy0%5%15%25%25%10%20%
Extra heavy0%0%5%10%15%20%50%
Bitumen0%0%5%10%15%20%50%

The main difference between extra heavy and bitumen is the viscosity: bitumen is highly viscous.

GasCraft generates shale oil and gas, and Buildcraft generates oil, although in weird fountains.

Unit Operations

Natural gas desouring

Removes H2S and CO2 via amine (ethanolamine) treating.

Sulfur extracted from sour gas mixture using Claus process:

  • Burn H2S to SO2, then 2H2S + SO2 => 3S + 2H2O, via Al2O3 or TiO2 catalyst (@ above S dew point)

Natural gas separation

  • Primary: Cryogenic distillation
    • Need a turboexpander that generates redstone flux and cools the gas, with separate gas (CH4) and liquid (NGL) outputs
  • Alternate: Absorption in “lean” oil, later boiled off
    • Light crude oil + gas => ‘rich’ oil + methane
    • ‘Rich’ oil + heat => NGL (as gas) + crude oil (recycled)

NGL separation

Processing of NGL through cryogenic distillation, yielding ethane, propane, butane.

Atmospheric distillation

Desulfonation

Sulfur compounds will interfere with catalysts, so they are removed by treatment with H2 to form H2S (g). That is then removed by: H2S + ZnO -> ZnS + H2O.

Catalytic reforming

Reforms the heavy and sometimes light naphta streams into more complex, higher octane hydrocarbons. There are four reactions:

Dehydrogenation
changes naphtenes to aromatics like toluene
Isomerization
creates isoparaffins from paraffins
Aromatization
creates aromatics from paraffins
Hydrocracking
breaks paraffins into shorter paraffins

The liquid naphta is mixed with H2, the mixture is heated to vaporize the naphta and they enter the reactor with the platinum/rhenium catalyst. The result is cooled to condense the hydrocarbons. This process must be preceeded by desulfurization.

Aromatics can be separated by extraction with diethyl glycol or sulfolane. Distillation separates compounds like benzene.

Diethyl glycol comes from reacting ethylene with air (or O2 is faster) w/ Ag catalyst to produce ethylene oxide. Ethylene oxide is useful for all sorts of things. It is converted into ethyl glycols by mixing with water at 200C. Distillation separates mono/di/tri-ethyl glycols.

Sulfolane results from reacting butadiene with SO2 and reacting the resulting sulfolene with H2 (g) w/ Pt or Raney nickel catalyst. Raney nickel is an Ni/Al alloy, activated by Zn or Cr.

Steam cracking

This breaks hydrocarbons into smaller, less saturated hydrocarbons. Hydrocarbon streams are mixed with steam and heated to 850C, cracked, then cooled. Distillation separates the components. Technically, the process is not complete, in that some small alkanes (ethane and propane) persist in the output, but we ignore the complexity of recycling. The main goal is the production of ethene (ethylene), the building block of most industrial organic synthesis.

The composition of the output depends on the input stream:

InputH2CH4EthenePropeneButadieneRPGC4RPOH2O
Ethane455253220
Propane20103015520
NGL305255233
L Naphtha108187710733
H Naphtha88157715733
L Gas Oil5513751051040
H Gas Oil5510551051540

SR is the steam/hydrocarbon ratio in mass. NGL has the same NR value as heavy naphtha.

The output proceeds through a series of columns that separate:

  1. Fuel oil (if any) from the rest
  2. Water (cooled from steam), RPG (if any), and rest
  3. H2, CH4, and rest
  4. Ethene, propene and C4 olefins
    • C4 => butadiene + butenes, separated by chemistry
      • from butenes, isobutene and 2-butene separated by distillation

RPG (raw pyrolysis gasoline) separated into benzene and toluene

Steps 3 and 4 are cryogenic, i.e., the stream is cooled between steps 2 and 3. Could use the turbo-expander that we already need for making NGL.

Butadiene is more soluble in an aprotic solvent than the butenes. The solvent decreases the volatility of butadiene, so the two chemicals can be separated by extractive distillation. The typical solvent is n-methyl-pyrrolidone. It is synthesized via:

acetylene + 2 formaldehyde => 1,4-butynediol 1,4-butynediol + 2H2 => 1,4-butanediol 1,4-butanediol + sulfuric acid => gamma-butyrolactone (GBL) GBL + methylamine => NMP

Formaldehyde: 2 CH3OH + O2 → 2 CH2O + 2 H2O (via Ag @ 900, Fe2O3 + Mb or V @ 600)

Methanol: CO (syngas) + 2 H2 → CH3OH via Cu/Zn oxide @ 500

Acetylene: partial combustion of methane @ 1500K

Steam reforming

Produces H2 from hydrocarbons: At 700-1100 C, endothermic, via Ni catalyst,

CH4 + H2O(g) => CO + 3H2

The CO + H2 mixture produced from natural gas is called syngas. The left-over CO can extract more H2 from steam using a gas-shift reaction (see below). The result is separated into CO2 and H2 by pressure-swing adsorption.

There are other sources of CO, such as partial oxidation of oil, coke oven gas (hood). See Table 6 on residual gases in Ullman’s.

High-temperature (400 C) Water Gas shift

Using a Fe2O3 + 10% Cr2O3 catalyst, produces CO2 and H2 by mixing CO (in the syngas or separated from it) with steam:

CO + H2O(g) => CO2 + H2

This reaction is incomplete, so H2 remains mixed with CO. We call the H2 + CO2 + (3%) CO mixture water gas.

Low-temperature (200 C) Water Gas shift

After the water gas stream has cooled from the high-temperature shift, this process produces H2 from the CO in the water gas. At 200 C, with CuO+ZnO+Al2O3 (equal parts) catalyst,

CO + H2O(g) => CO2 + H2

The chemical reaction omits the fact that H2 remains in the stream, and that we are squeezing out more H2 from steam in each step, converting CO to CO2 in the process. After the HTS, there is only 3% CO remaining, and only 0.3% remains after the LTS.

For simplicity, we will ignore this second gas shift for now.

Streams

Natural gas

Natural gas needs to be cleaned to methane by removing sulfur (desouring) and separating the higher hydrocarbons.

Light naphta

Heavy naphta

Recovered waste products

Vanadate

Coke from oil refineries contains vanadium. The coke is leached using sulfuric acid and then ammonium vanadates are precipated, as from magnetite.

Food processing

http://www.nzifst.org.nz/unitoperations/

Manufacturing

Processes

Basic processes:

  • Casting/molding: shaping a material as liquid, then solidifying.
    • Perhaps the only mod that casts molten metal is Tinker’s Construct.
    • Perhaps no mods attempt to model plastics.
  • Forming: reshaping of solid metals, plastics, without losing material.
  • Machining: cutting a material into a specific shape.
  • Joining: connecting two objects.

Casting

Types:

Centrifugal
For making cylindrical shapes, like pipes and buckets. Materials: iron, steel, glass, aluminum, copper, nickel.
Continuous
Produces billets, blooms and slabs for easier rolling. This usually happens at the time of smelting. Metals: steel, aluminum, copper.
Die
Forcing molten metal into a cast. Metals: Zn, Cu, Al, Mg, Pb, pewter, Sn. Produces large quantity of small castings.
Investment
For most intricate casts; traditionally based on beeswax, now foam. Expensive. Metals: Fe, Al alloys, steel, Ni alloys.
Sand
Sand casts are the most common. Actually a mixture of sand, clay and refactory materials.
Permanent mold
Mold made from metal.
Shell mold
Like sand casting, but mold is a shell formed with sand mixed with resin. Since mold is expendable, more complex shapes can be cast.
Spray
Semi-liquid metal is sprayed onto a substrate.

We could have smelting machines that output molten metal prior to casting. The metal could be piped to a particular casting unit, such as a continuous caster to produce billets that are cheaper to form in e.g. a rolling machine. With the exception of centrifugal casting, the different casting methods are mostly distinguished by the type of mold. Thus, we could have one primary casting machine that accepts different types of molds. The type of mold required depends on the product.

Molding

Powder metallurgy
Metals shaped as powder, then heated to bind. This could be a heater using metal dusts as input
Plastics

Forming

Forging
Applying localized pressure to draw out, shorten, squeeze, etc, a metal. Like the GT Forge Hammer.
Rolling
Squeezes metal between two rollers to make plates and rods. Provided by RC.
Extrusion
Pushing/pulling a substance into a mold.
Pressing
Pressing a pattern onto a material.
Shearing
Cutting stock into smaller pieces.

The RC rolling machine and GT forge hammer may be sufficient.

Machining

Milling
Rotary cutter, workpiece advanced at angle to tool to remove material.
Turning
Workpiece is turned against linear cutter. The Gregtech lathe is one example.

It seems the simple GT lathe is sufficient. There is also a potential manual equivalency in forge multipart and its diamond saw.

Joining

Products

Soda ash

By the Solvay process:

  1. Purify brine (Geologica purified brine)
  2. Lime roasting and slaking (defined elsewhere)
  3. NaCl + NH3 + CO2 + H2O => NaHCO3(s) + NH4Cl(aq)
  4. Decomposition of NaHCO3 to Na2CO3 (2NaHCO3 => Na2CO3 + H2O + CO2) [TODO in chemica].
  5. Recovery of NH3: 2NH4Cl + Ca(OH)2 => 2NH3(g) + 2H2O + CaCl2(aq)

Activated carbon

  • Wood, sawdust, peat, straw, bituminous coal are chemically activated via treatment with ZnCl2 or H3PO4.
    • ZnCl2 process: Mix aqueous ZnCl into carbon material (solid product), roast @ 1000 K to yield activated carbon.
      • ZnCl2 is made from Zn(l) + HCl(g) @ 1000 K
    • H3PO4 process: Same as ZnCl except @ 800 K.
  • Charcoal, lignite coke, peat coke are gas activated by CO2 or steam

Machines

Machines are tools that consume energy to perform some action. In Minecraft, a machine is distinct from a tool in that functions as a block, usually automatically.

Vanilla implements a number of machines. Many of them are abstract, such as the furnace, which simply cooks anything inserted into it. Perhaps the simplest, in the physical sense, is the piston, which just moves a block.

The simplest machine redirects force from one direction to another. Classically, there were 6 simple machines:

Lever
Not to be confused with the Vanilla lever. This would be like a seesaw, where 2 or 4 rods would be connected, to a fulcum (wheel) at the center. They could be rotate vertically or horizontally, depending on their orientation. When a block is pushed (e.g., by a piston) against one end, the lever shifts to yield to the block, and the other end pushes a block in the opposite direction. It could rotate on redstone pulses supplied to the wheel. Clockwise or counterclockwise depending on whether the pulse is up or down.
Wheel and axle
If an axle (rod) is attached (in Z) to the wheel, it rotates.
Pulley
Just a wheel, except attach a ropes (blocks) to two sides, instead of rods. When a rope moves, e.g., by piston, pull or push the other rope in its own direction. Could permit two rope blocks in the same space, to allow for reversal.
Ramp
When a block is pushed into it, it pushes the block in an orthogonal direction.
Wedge
Just a portable ramp, skip for now.
Screw
A shaft that moves when it is rotated, depending on the direction of rotation. Probably needs to be distinguished from small fastening screws.

Important components include: wheel, rod (potentially threaded), rope, ramp/wedge.

Research

Chemical Compounds

The player could research the properties of chemical compounds in a realistic manner. Lab equipment and instruments would be crafted and applied to some compound. The lessons learned would be recorded in a lab notebook, which has limited durability (becomes filled with notes). Once all properties are known, the compound may be used in industrial processes (put into production). The trick is to research efficiently, without wasting notebooks and other resources. All knowledge ends up in a searchable chemical reference book.

Worldgen

Ore deposits

By default, all ores will be modeled as veins. PFAA will not actually generate any ores. Instead, we will provide a COG config.

First, internal deposits. Magmatic processes separate ores either along a temperature gradient or through solubility differences. The latter generates metal sulfides. Hydrothermal action also typically generates sulfides, since sulfur is able to carry the metal in the aqueous phase.

The surficial deposits generally consist of oxides. These need to be processed very similarly to sulfides. Do we distinguish between oxides and sulfides? It would present interesting chemistry. Sulfides are a source of PGEs, especially with Ni, Cu, Cr and Co. Perhaps more importantly, the SO2 produced by smelting can be reclaimed as sulfuric acid. The obvious disadvantage would be the need for additional block IDs. It also opens the door to modeling specific minerals. The advantage would be that minerals could be used for other purposes. Mostly, these relate to coloring and other decorative aspects. Nothing wrong with that.

Some specific types of ore deposits:

DepositOccursOresMinerals
Banded Iron FormationSedFe
Volcagenic Massive SulfideOcean, ice mountainsCu Zn Pb Au Ag (bp: Co Sn Ba S Se Mn Cd In Bi Te Ga Ge)
Sedimentary ExhalativeSedPb Zn Ba (less: Ag Cu Au Bi W)
PorphyryBreccia veins in dioriteCu (rare: Mo, Ag, Au)
Layered intrusionsPeridotite, gabbro, dioriteCr Ni PGE Ti Vn
KambaldaSerpentineNi
PlacerRivers: gravel, sandFe(mag) Sn RE Cr granite:Ti(ru)/Zr basalt:Ti(il)
PegmatitePlains: graniteW-rich, Li-rich: Li Cs Nb Ta (Be)aquamarine tourmaline topaz fluorite apatite corundum
SerpentiniteAnywhere, more common deep, EH/OceanNi, chlorite, magnesite, chrysotile
CarbonatiteMountains: graniteFe(mag) Th Ba Cu U Ti REapatite, verm, fluorite
EvaporitePlains, desert
Iron Oxide Copper GoldBreccia veins under BIF in graniteCu, Au
Conglomerate Au/UVeins in bowl of conglomerateAu, U
Granitic Cu/Au (Sn/W)Veins in graniteCu Au (less: Sn/W)
Carbonate Zn/PbLimestoneZn Pb
GreenstoneGreenschistCu+Au Zn/Pb

Placer deposits could be modeled by shoveling a black sand, with a gold nugget as a rare drop. Pulverizing generates 1 magnetite dust, with a 10% chance of gold nugget. Use of a magnet (factorization) would also separate magnetite.

Banded Iron Formations consist of a single, banded block. Pulverizing yields 2 hematite dust, with 20% chance of magnetite dust. The hematite can be hydrated to red dye, or smelted to iron, like magnetite.

Laterite soils are a type of clay, except cooking is not necessary to produce bricks. They can be simply crafted into bricks. It is found only within jungles. Within the laterite, there will be child veins of bauxite (25%), and iron ore (75%). The lateritic iron ore is of two types: yellow and brown (ochres). When pulverized, they yield the corresponding dust, plus a 5% chance of nickel ore dust. The dusts can be smelted to iron, or hydrated to brown or yellow dye. Smelting is a one-step process for the blast furnace, while for other furnaces the ore is first smelted to hematite, which is smelted to iron.

Marine evaporite deposits will consist of limestone, under gypsum, under rock salt. Grinding limestone yields calcite + some chance of dolomite. Grinding gypsum yields the mineral itself + 20% native sulfur. Grinding rock salt yields halite + 50% sylvite. Perhaps grinding sylvite could yield MgCl2, say 20% of the time. Borax and soda ash occur in lake evaporites (desert-hills only).

The VMS deposits occur through feslic volcanic activity in mid-ocean rifts and continental back-arcs (ice mountains). The morphology is globular, with chalcopyrite at the bottom and sphalerite/galena towards the top. Gold at the top.

There is some desire to balance the distribution of ores between biomes, so we outline them here by biome:

BiomeRocks
Continentalsedimentary, granite, diorite
Extreme Hillsrhyolite, andesite, granite, diorite, gabbro
Oceaniclimestone, basalt, gabbro
BiomeOres
Continentaldolomite, coal, BIF, LI, SEDEX
Extreme Hillsvolcanic ash, 2*LI, carbonatite
(Frozen) Ocean2*dolomite, 2*VMS, LI, 2*SEDEX, 2*BIF

These are all considered continental:

(Ice) Plainsevaporite, 2*iron
Beachbasaltic/granitic/garnet sand
(Frozen) Riversgranitic sand
Desert (Hills)quartz sand, evaporite
Swamp2*coal, laterite
Jungle (Hills)laterite
Ice MountainsVMS, 2*iron, granitic/garnet sand
Taiga (Hills)2*iron
Forest (Hills)conglomerate bowls

Special consideration: Biomes o’ Plenty

Most BOP biomes will be caught by the biome dictionary matching. There are some that are special though:

Alps
Collision of European and African plates, was once an ocean between. The tallest reaches are metamorphic, i.e., gneiss (primarily), schist, greenschist, etc, while the rest tends to be sedimentary, consisting of greywacke (a sandstone that is like a fine-grained breccia), limestone (primarily) and mudstone. Beneath the alps one finds the gabbro/basalt that underlied the ancient sea, as well as some granitic intrusions. Perhaps we could model all folded mountains as being mudstone, then limestone and then gneiss at the peak, in other words, start with the ocean but instead of the basalt islands, switch to continental.
Wasteland
Evaporite deposits.
Badlands
Formations largely sedimentary, inter-mixed ash.
Volcano
Basalt instead of sediment.
Hot Springs
Rhyolite near the surface, instead of sed. Intermixed with volcanic ash, pumice, etc.
Outback
Primarily sandstone.
Highlands
Modeled as the Scottish Highlands, we would have (green)schist/slate on top, with lower regions consisting of sandstone (primarily) and conglomerate. Serpentinite veins throughout.
Glacier
Could model as Yosemite, with granite domes.

BOP bugs:

  • Chapparal is not plains but rather hills.
  • Are the tropical and plain rainforest mixed up in temp/rain?
  • Mountain has its min/max height set twice?
  • Why are fen and moor not typed as a swamp?

Native metals

The following native metals are relatively common:

  • Gold
  • Silver (usually w/ gold as electrum)
  • Copper

And various PGE metals occur, often as alloys:

  • Platinum
  • Osmium (+ Ir, Ru)
  • Iridium (+ Os + Ru)
  • Ruthenium (+ Ir)
  • Palladium (+ Pt)
  • Rhodium (+ Pt)

Native copper (10%), gold (10%), electrum (5%) could be dropped from conglomerate and mineral sands. The other native elements would require more advanced processing. Realistically, copper nuggets are much rarer than gold nuggets, but in terms of gameplay, it would be interesting to force initial copper extraction to nuggets.

Extra planets and moons

Eventually, we want to include all planets (including exoplanets) and moons (including psuedo-randomaly generated ones).

Mars

Physical properties

  • Mass: 0.107 Me
  • Gravity: 0.376 g
  • Temperature: -143/-63/35
  • Pressure: 6 mb (Humans require: 61.8 mb)
  • Atmosphere: 95% CO2, 3% N2, 2% Ar
  • Crust thickness: 50km (Earth: 40km)
  • Light intensity: 44% of Earth

Crust composition

There is a thin layer of dust (regolith). The red color is caused by iron oxide, mostly in the form of magnetite (TFC), and hematite (TFC) + goethite (TFC). The magnetite causes the dust to be magnetic. The bulk of the dust consists of pulverized plagioclase feldspar (say, labradorite), zeolite, and to a lesser extent pyroxine and olivine. There is an enrichment for sulfur and chlorine. The dust is only millimeters thick, so we might be able to model the dust like “snow” and have dust storms.

Beneath the dust is finely broken up basalt, enriched with sulfur and chlorine. These deposits are not concentrated enough to mine, but it may be that plants could grow in the soil, with some nitrate fertilizer, perhaps, and a greenhouse to control the temperature and pressure and filter out the radiation. More about soil: http://chapters.marssociety.org/winnipeg/soil.html

The primary type of rock near the surface is basalt (TFC), followed by andesite (TFC), which is more common in the northern hemisphere. In the lower layers of the crust, andesite dominates, intermixed with other igneous rocks like dacite (TFC) and granite (TFC).

In fluvial landforms (where water was present), near the surface, one can find hematite (TFC), kaolinite (TFC), kieserite, jarosite (uninteresting), opal (TFC) and gypsum (TFC). Sandstone is also present. Maybe limestone (TFC). Also, the Columbia Hills (in Gusev Crater) have minerals formed in the presence of water: http://en.wikipedia.org/wiki/Columbia_Hills_%28Mars%29

Mineable resources

Ores:

  • Magma action: Ni-Cu-platinoid clusters, Ti, Fe, Cr
  • Hyrdothermal action: Cu, Zn, Pb, Se, Sb, Cd, As, Ag, Au, Te
  • Soil deposits: basaltic soil might contain chromite (CrO2), magnetite (Fe3O8), ilmenite (TiFeO3)
  • Fluvial deposits: Mg + SO4 (kieserite), Ca + SO4 (gypsum), hematite blueberries
  • Pegmatite deposits near granite: Li

By platinoid, we mean the elements Pt, Pd, Os, Ir, Ru, Rh (very rare). These could be produced as a by-product of processing Ni/Cu, or even from nuclear reactors. Mostly used for catalysts (especially Pd).

Ores produced by magma action will commonly occur near the surface in the volcanic regions. Otherwise, one needs to dig really deep. The hydrothermally concentrated ores will be present throughout at moderate depths, and at low depths in impact craters and volcanic regions. Soil is uniform throughout, except in the fluvial deposits, which have their own surface composition and are found in the valleys of the southern hills and impact craters.

Water ice will be a minable resource on Mars (and other cold planets). This will be found as ice in the polar regions (perhaps covered by a layer of dry ice) and also under the surface. The northern lowlands and basins will have ice near the surface, while one will need to dig deeper in the southern highlands. Volcanic regions are unlikely to have any ice, perhaps a little liquid water.

Also important are geothermal energy sources. This “heat” could be modeled similar to lava (as a flow) and some machine could be attached to such a heatflow to capture it.

“Geomes”

The two hemispheres of Mars are quite different:

  • Northern hemisphere (lower, younger, smoother, 32km crust thickness)
  • Southern hemisphere (higher, older, craters, 58km crust thickness)

The Northern hemisphere accounts for 1/3 of the surface area.

Straddling both is the Tharsis volcanic bulge, which are extremely tall volcanoes, with sharp ravines running outward. 7-10 km above the surroundings. May account for 25% of the total surface area.

There are several large, ancient impact basins, surrounded by low volcanoes. Deepest point at 8km below “sea level”. Full of sedimentary material. Possibly 10% of surface.

There are large ice caps on both poles. 10%?

Huge canyons (Valles Marineris), 4000km long, 10km deep. There are similar, huge outflow channels, with lots of sediment.

In summary, we might have the following biomes:

  • Plains (25%) [ocean] [plains]
  • Southern hills (25%) [ocean] [desert hills] [+basins] [+canyons]
  • Volcanic bulge (25%) [minor: hills] [extreme hills] [+canyons]
  • Ice caps (10%) [minor: plains, hills] [ice plains]
  • Impact basins (10%) [generated]
  • Canyons (5%) [generated] [ravine]

To really communicate the scale of these features, compared to Earth and all of its weathering and balanced igneous activity, we would probably need to increase the height of the world 4-5X. Without insane hacking of the code, the true upper limit is to increase terrain generation up to 256 (2X). We will defer this until we get functioning biomes.

Portal

To be most realistic, we would want the player to construct a space ship and lauch to Mars. The amount of resources required for such a trip would be generally prohibitive. Therefore, we can rely on inspiration from rituals related to Mars/Ares. Ideas:

  • Kill a puppy at night (reflects the sacrifice of puppies). Do we want this to be on an altar? Like a 1x3 stone surface, with torches. Or any stone?

Terraforming

Venus

Mercury

Asteroids

4 Vesta??

Sure, it is tiny, but it is also fairly well characterized.

Jupiter’s moons

Ganymede

Io

Europa

Callisto

Saturn’s moons

Titan

Enceladus

Uranus’s moons

None worth it

Neptune’s moons

Triton

Pluto, other KBOs

Exoplanets

Exoplanet Generation

The main challenge will be creating semi-realistic exoplanets, with interesting, playable and challenging combinations of resources and conditions.

High-level Considerations

Let us begin with purely physical considerations. A planet will have a certain:

  • gravity,
  • temperature (orbital zone, albedo, greenhouse effect of atmosphere),
  • weather, like rain (presence/type of atmosphere)
  • length of day (spin rate; could be tidally locked),
  • atmosphere composition (mass, temperature, crust composition),
  • crust composition (raw material, orbital zone, volcanism, water),
  • potential for alien life (temperature, atmosphere, surface liquids)

Here are some simple relationships:

  • Mass depends on radius and density.
  • Orbital zone depends on the type/size of the star, and the distance from the star.
  • Albedo depends on the atmosphere and surface; we might just work off of the Kepler assumptions.
  • Volcanism depends on the density of the planet.

We know these values from Kepler:

  • mass
  • gravity
  • orbital zone
  • temperature (need to somehow adjust for atmosphere)

The other things are more complicated.

Crust composition

Planets are formed from material left over from star formation, so the composition of the raw material will be similar to that of the star. Since the material must be solid to accrete into a planet, the composition also depends on the the orbital zone. There are three basic types of material:

  • Metals (Fe, Ni)
  • Silicates (Si)
  • Ices (C, N, O, S)

We have measurements for C, O, Si, S, Fe, and Ni. Notably, we are missing N, so we will need to assume the solar fraction for that. All other minor elements not mentioned here will be assumed present at solar fractions.

Metals

The metals will be complexed to form:

  • sulfides like FeS (assume 3/4 of S is consumed),
  • then oxides like FeO, and finally (probably just ignore)
  • carbides (when C dominates O, i.e., where it is very hot).

This is really just important for calculating the amount of remaining oxygen.

Silicates

For the silicates, Si will mostly form compounds with Mg, and to a much lesser extent with Ca, Al, Na and Ti (in decreasing order). These include MgSiO3 and Mg2SiO4. Let us just assume that oxygen is consumed at 3X the rate of silicon.

Volatiles

The remaining volatiles will condense in the form of clathrates (gas trapped in water crystals), hydrates and pure condensates. This depends on two variables: the temperature of the disk and whether the environment is oxidizing or reducing.

First, for low temperature, in an oxidizing setting, we have:

  • water
  • carbon monoxide (CO)
  • carbon dioxide (CO2)
  • methanol (CH3OH)
  • methane (CH4)
  • nitrogen (N2)
  • ammonia (NH3)
  • hydrogen sulfide (H2S)
  • phosphine (PH3)

Assume these ratios:

  • CO/CO2/CH3OH/CH4: 70/10/2/1
  • N2/NH3: 10/1
  • H2S/S: 1/2

In the reducing environment, carbon is only found in methane, and we flip the N2/NH3 ratio.

Oxidation is only possible for C/O < 4/5. Just below the boundary, the oxygen is consumed by oxidation, and there is none left for water. Reducing conditions occur for any C/O value, so low C/O values will be high in water, and even high C/O values will have some water.

At warmer temperatures, solids are converted to gases. CO and N2 will be the first to convert as temperature increases. It seems reasonable to assume that planets initially form in the cold, and then as the disk clears up, the temperature increases and the most volatile compounds reenter the gas phase. However, this is complicated: http://phys.org/news/2012-07-earth.html

Atmospheric composition

A planet will capture a tenuous atmosphere prior to formation (mostly H and He), but this is likely to change according to complex, geophysical processes that are beyond our ability to model. Sorry. For interest in the case of Earth, see: http://www.ncbi.nlm.nih.gov/pmc/articles/PMC31109/

We can say, however, that a planet must have a sufficient mass to retain an atmosphere. This is due to gravity, and the extent of the magnetosphere. So far, we have not found any exoplanets that small, but we can model the thickness of the atmosphere by the mass.

It comes down to plate tectonics, major impact events, and complex systems. We will assume outgassing is the major player, because other events like comet impacts probably are not generally significant. Roughly, the bigger the planet, the more geological activity and the more outgassing. Usually, the outgassed material will be water vapor, nitrogen or carbon-based. In colder regimes, ammonia or hydrogen sulfide are possible. Once released, the compounds are oxidized by photoreactions (and other things). This means that a carbon-based degassing will eventually end up as CO2, H2S as SO2, PH3 as PO3, and NH3 as N2. The temperature does not necessarily be high enough to maintain the compounds in the gas phase, as long as their is replenishment (from life or volcanism). The oxidation of methane would lead to heavy hydrocarbons that would form seas.

Once the gases are established, we can model the temperature by the amount of greenhouse gases. The more greenhouse gases, the higher the temperature (above the Kepler lower limit) and pressure. That will help determine the liquid phase elements on the surface, and establish a geochemistry. If we determine that biochemistry is possible, this will lead to production of other gases.

Types of Geochemistry

In the below, we assume life is carbon-based. We might go after silicon-based life later.

Water

This is like the Earth. Requires liquid water on the surface. Water cycle produces water vapor in the atmosphere. And life would produce oxygen. For simplicity, we assume a planet has a single geochemistry.

Carbon

So-called diamond planets. Requires a very low oxygen content, so that metals and silicate form carbides. Any oxygen gets tied up into CO. Lots of methane, which could form hydrocarbons that rains down to produce tar lakes. Life would breathe CO2 (a major component of the atmosphere, with CO), and breathe out O2 (minor component). Where does all that oxygen come from? Probably deposited by impact events, in the same way that Earth got carbon.

Sulfur

Would have sulfuric acid (H2SO4) instead of water. There would be trace sulfuric acid vapor in the atmosphere, and life would produce O2. Animals would breathe as on Earth. N2 would be the other major component. Why would H2SO4 be favored over water? There would need to be a lot more sulfur. Would also tend to be hotter (around 88 C).

Methane

Would be very cold, around -179 C, so that methane could serve as an alternative to water. Life would produce O2 and N2 from trace amounts of NO (oxidized from the dominant N2).

Phosphorous

Based on phosphoric acid (H3PO4) instead of water. Atmosphere will contain a lot of PO3. The animals would breathe that and exhale PH3 and CO2. Would need to be really hot (171 C). And probably a lot of initial PH3.

Ammonia

Very cold (-115 C), so any water is frozen and NH3 replaces it. Life would produce N2 and O2 from NH3 and CO2. Animals would breathe the O2 and exhale CO2, like on Earth.

Iron

Nothing but an iron core. These are probably uninteresting. Exclude them?

Putting it all together

Here is an algorithm:

  • Choose an exoplanet with a known mass, radius, distance from sun, gravity, and temperature. We assume its star has a known chemical composition.
  • Determine a spin rate for length of day. How?
  • Determine the stone/mineral/ore/metal compositions from observed Fe, Ni, and Si = Mg amounts, assuming other metals are like Earth.
  • For the volatile C, N, O, S, P, determine amount of volatiles.
    • First decide redox state: C/O > 0.8, reducing, otherwise 50/50.
    • For oxidizing, oxidate C according to ratios.
    • The rest of O becomes water.
  • Estimate the temperature in the protoplanetary disk to determine which volatiles were stable enough to condense. For simplicity, we assume the planet temperature is the same as its embryonic temperature.
  • Simulate outgassing, establish an atmosphere.
  • Simulate any greenhouse effect, increase temperature accordingly.
  • Establish a geochemistry. To keep things interesting, this should also include a biochemistry.
  • Regenerate the atmosphere, based on the chemistry.

Simple classification

Because we need to ensure playability, it is not feasible to simply randomly assign all of the parameters indepedently. Instead, we should have classes of planets (sort of like biomes, although planets should have multiple biomes). Within a class, there is a small amount of variability.

The broadest classification would be something like:

  • Gas giant
  • Ice giant (really a gas giant with supercritical water/methane)
  • Terrestrial (rocky)

Gas giants would be a tough environment, since it would not be possbile to survive on the core, if any. In theory, things could be made placeable on gas blocks, while the player would still move through them. It would be totally trippy though.

If we chemically classify terrestrial planets, we have:

  • Silicate planets (like Earth and Minecraft), most common (~96%) in galaxy
  • Carbonate planets (diamonds)
  • Iron planets (one big core)
  • Chlorine (rarest)
  • Ammonia
  • Phosphorous
  • Methane (like Titan)
  • Sulfur
  • Water (like Earth)
  • Ocean

Since the biogeochemistries other than silicate/water are extremely rare, we should probably stick to the familiar, especially given our educational motivation.

The physical classifications are perhaps more relevant:

  • Lava (protoplanets, close orbiting), making up almost 50% of exoplanets
  • Crater (due to lack of atmosphere)
  • Bare rocks (lifeless)
  • Desert
  • Ice
  • Ocean
  • Forest
  • Civilized

But who really wants to play on planets that are entirely desert, or ocean, or lava, or lifeless? Well, there would still be:

  • Interesting crust composition for mining, with possible subterranean life. Depending on the planet radius and silicate content, the crust can be quite deep.
  • The technical challenges of constructing, configuring and managing the colony structure and the robots.
  • The terraforming challenge.

The surface could be made more interesting by having supply pods scattered all over the planet that were dropped during the crash.

Star travel

Goals

On any planet, the goals are:

  • To survive
  • To build a spaceship and fuel for traveling onward
  • To terraform the world for long term settlement

Traveling onward

This goal solves the end-game problem, where the player has solved all challenges. The player is given the opportunity to leave the conquered world behind, and to start a-new. However, there is some continuity: the player is allowed to stock the ship with supplies, and subsamples of that inventory appear as supply modules strewn about the new world.

Terraforming

It is not clear how we will model this, or how it would benefit the robot player. It would be cool though to have NPC colonies appear as the conditions were improved.

Robotic player

The idea is to initially model the player as a cyborg. This puts less constraints on the player in hostile environments. It also opens up interesting possibilities for modular player abilities. The robot should be humanoid, for simplicity. We still want to model the environment, because one goal is to bring NPCs (non-cyborgs) to the world.

Component-based abilities

The player abilities will be based on a component system, which replaces the armor system. Instead of having a helmet, breast plate, etc, the robotic explorer will have the following component slots. There is a basic, built-in component of each type that never wears down. The others have a limited life-span.

It turns out that IC2 already has the battery backpack and solar helmet, which behave pretty much as we imagined. The gravitation suite addon even extends the batpack to support flight. And electric armor is essentially a shield. Really, our only contribution will be fuel cells as battery alternatives, plus different levels of batteries and solar cells.

This is also related to the mecha-armor of Factorization.

Solar panels

There will be different levels of solar panels, with increasing efficiency and cost. Solar panels yield electrical power, at a rate depending on the type of panel and the amount of light. When the energy is not being used (i.e., when the player is not moving or working), the energy is deposited into the battery.

Battery

Better batteries: more storage, slower discharge.

Fuel cell

This provides power in addition to the solar panels and is necessary for powering heavy duties, like drilling/digging. The energy output will depend on the type of fuel. Excess energy is deposited into the battery.

Question: could the fuel cell and battery fill the same slot? Batteries should be capable of powering heavy machinery (at least the type of machinery a humanoid robot would operate). An alternative would be to support only batteries, and fuel cells would charge the batteries. It makes sense to generalize: a fuel cell and battery are both energy sources; the difference is that the battery requires electricity for recharging, whereas a fuel cell simply needs to be refilled with fuel.

Auxiliary system

There will be one auxiliary that will consume power. Possibilities:

  • Balloon/dirigible
  • Shield (combat, lava diving)

Respiration

The cyborg has a built-in air tank that automatically recharges when in breathable atmosphere. The tanks will store much more air than a single lung’s worth, so the constraint is more similar to hunger than swimming. The player can carry additional air tanks, along with food.

Environmental Modeling

Atmosphere

Important atmospheric properties are:

  • Temperature (depends on day/night)
  • Pressure
  • Composition

Possible to do this by having special breathable air blocks that change properties when they become adjacent to cold or raw atmosphere. This may be too complicated though. Easier to use force-fields (via MFFS) and then detect when a player is outside of a force-field. Non-cyborgs have a limited amount of time before death. This depends on the three properties above, but comes out to around 30 seconds maybe for Mars.

If there are missing life support systems within the force-field, the atmosphere will slowly deteriorate (over the course of say, one day) and then things start dying. The HUD can show the current temperature and composition status (green, yellow red; not exact values) for the current dome.

Radiation

Planets with thin atmospheres and magnetospheres will not be able to block the light from the sun. Depending on the type of star and distance, this could mean lethal doses of radiation. Effects of this radiation would be long-term, however, so it is tough to model. Perhaps it would affect the growth of plants.

Life Support

Machines, mechanical or biological, will be capable of conditioning the air. These include:

  • Heater/Cooler (increases/decreases temperature, pressure)
  • Oxygen generation (electrolysis, biomass)

Both types of oxygen generation require water. The ship will come with a finite water source. The occupant will produce water as water vapor (exhalation) and as waste (urine, feces). The life support system must recover that. Otherwise, it needs to be provided externally.

The obvious advantage of a farm is the consumption of CO2 and the production of food, thanks to photosynthesis. The light could come from the star, or artificial lighting.

So, in summary, there are three machines:

  • Heater[Factorization]/cooler
  • Greenhouse: <= free CO2, <= H2O, => O2, => food
  • Water reclaimer [TE Aq Accumulator]: <= free H2O, => captured H2O

And the “world” inside the habitat converts O2 to CO2 and generates free H2O (waste, water vapor).

Note that we will avoid detailed modeling of this process. if a machine breaks, bad things happen. The number of plants needed in a greenhouse depends on the population. The better the conditions, the more colonists, the more human resources. Note that water could be obtained from indigenous sources. This is why a heater/cooler is needed: it requires the user to maintain a power source.

Eventually we might add an alternative to the greenhouse:

  • Oxygen generator [IC2 electrolyzer]: <= H2O, => O2
  • CO2 scrubber: <= free CO2, => captured CO2

Progression

An important gameplay mechanic is progression through tiers of technology/development. Some mods model this using history: how one idea led to the next over time. Since we are focused on the present, historical progression is not relevant. Instead, we might follow the technical complexity gradient: one technology depends on having another. The robot is stranded on another world with limited supplies, and the lofty goals of either leaving the planet or terraforming it.

Initiation

How does one become the robot? This could happen through a long string of technological developments, based e.g. on IC2, or we could enable early entry.

Modules

It seems like these ideas are too numerous to pack into a single, monolithic mod. Instead, we could have separate modules:

  • Geologica: rocks and minerals (ores), generated by MOG, biome-based regolith and atmospheric composition.
  • Chemica: Provides chemical recipes and machinery, using the materials provided by geologica.
  • Fabrica: High-level crafting as a result of chemistry.

Similar mods

AstroCraft [1.2.5]

MineCraft floating around in outer space. Gather iron from satellites to build tools and fight aliens.

Solar System Mod [1.2.5]

Implements all planets in the solar system, semi-realisically.

Night Sky + Space Mod [1.2.5]

Similar to Solar System Craft. Adds some goofy planets. Revives the dead Moon and Mars mods.

SpaceCraft [1.2.5]

Revives the Moon mod. Interesting poll on forum: people want realistic planets, not unrealistic ones.

TerraFirmaCraft

This makes survival mode more realistic and challenging. It adds a huge number of ores, stones, minerals, metals, gems, and trees. These can be very useful for teaching geology and (on some planets) biology. We would like to present a similar challenge level; however, it is unclear whether such a low level of technology (starting with bare hands) would be both interesting and an effective means of education. Right now, we are just learning from its code, especially with regard to the world generation. Handling multiple rock types is a pain.

Underground Biomes

This is probably the most similar to geologica: adds 8 types of igneous, metamorphic and sedimentary rock, with ores spawning only in certain rock types. New types of cobblestone, half slabs, etc. Sort of has a different goal though. It wants to make the underground more interesting, including underground villages, etc, while we just want to add more substances to the game.

Gasses in Minecraft

Adds gas sources, transport and processing. About 5-10 gasses are supported; apparently there is an API for adding more. Unfortunately, does not seem to integrate with BC.

GasCraft

Not as mature as “Gasses in Minecraft” but integrates with BC.

FrogCraft

IC2/GT addon that adds industrial chemistry. More similar than MineChem, but we want to be more principled/comprehensive and independent of GT.

Galacticraft

Travel to the moon, other planets, and beyond.

Starminer

Japanese mod, “realistic” gravity in orbit.

Mod Integration

We define a complex chemical model and programmatically manifest it through integration with other mods. Eventually, we might have our own system of machines, but for now, our model is sufficiently detailed such that any external representation is a reduction of its complexity.

For processing, we can interface at two levels: material and recipe. The ore dictionary is the simplest form of material integration. It requires that the mod support a particular type of material. Gregtech has an enumeration of all materials it handles and generates all recipes and items from the material definitions. Recipe-level integration requires explicitly specifying recipes via an API. Except for Gregtech, this is the primary mechanism for mod integration. Below is a table of how abstract processing steps map to machines in specific mods:

ModCrusher + pulverizerFurnace
RailcraftRock crusher (9,%)Blast
AE2Grinder (2,%)
TEPulverizer (2,%)Redstone
EnderIOSAG Mill (4,%)
IECrusher (2,%)Blast
RotaryCraftGrinder (1)Blast
BC+Duster (1)

Some notes on individual mods:

IndustrialCraft

We may not support this directly, because Gregtech already handles it, and no one really plays IC2 without GT. Support would be complicated, since IC2 adds concepts like impure, purified and centrifuged ores.

Gregtech

GT already includes many of our materials, particularly the ores. Since we want to be independent of GT, we will specify all recipes, even when redundant. This will make NEI really messy, so we may add an option to remove all relevant GT recipes, but perhaps that should be left to the modpack creator.

Machine(Ideal) Purpose
Alloy SmelterAlloying two metals
Arc FurnaceSteel from scrap, CaC2, alloys, phosphorous
AutoclaveCrystal production, pressurized cooking
Chemical bathOre leaching
CentrifugeGravity separation
Chemical reactorReactions
Fluid extractorItems to fluid, like melting metals
Fluid heaterHeating fluids
Fluid solidifierCooling, precipitation
MixerCombines two fluids
Electric blast furnace2 in, 2 out, 1 gas in, 1 gas out
Distillation towerDistills one fluid into five
Heat exchangerHeats one fluid, cools the other
Electric furnaceJust a basic furnace
Electric ovenCould use for roasting?
DistillerySeparates a phase from a solution
Electromagnetic SepSeparating iron sands
ElectrolyzerElectrolysis

The EBF is just not realistic enough to serve our purposes. Instead, we introduce the “hot blast furnace” based on the Gregtech API. We consider the EBF as a “basic oxygen furnace” for converting pig iron to steel. Note that calcite triples steel output from pig iron.

Design of 3x3x5 multiblock:

  • Three inputs: (iron) ore, charcoal/coke, calcite. All at the top.
  • Fluid input of compressed air, or hot air heated by cowper stoves, a low-tech version of the titanium heat exchanger.
  • Require four fluid (air) inputs, called tuyeres, at the second from bottom layer, one on every side.
  • Gas output should be CO2 (at top, in the middle).
  • By-product should be (cooled) slag (CaSiO3), released from hatch at the bottom.
  • Molten pig iron is released through hatch at the bottom.

The heat exchanger is currently hard-coded to heating water and cooling lava (and coolant). We might try to generalize it.

The electric oven is currently redundant with the electric furnace. Technically, a furnace is just a type of oven applied to metallurgy. But there is also the concept of “industrial oven”, which might be a:

Curing oven
Coating metals
Drying oven
But not as hot as a “kiln” (pottery making)

So perhaps we could apply it to roasting sulfide ores.

Mekanism

The enrichment chamber is the closest thing to a pulverizer, even though it also acts like a compressor or ore washing plant sometimes.

Chemlab

A somewhat adhoc mod with interesting machines. The centrifugal extractor is closest to dust production, though it depends on crushed ore (from the crusher).

Railcraft

  • Coke oven could be generalized to any type of pyrolysis.
  • Rock crusher should handle ores via ore dictionary.

Forestry

  • Ore dictionary should allow rocks/ores in backpacks.

BuildCraft

The planned distillation tower would be useful, but it seems abandoned. Buildcraft Additions adds a multiblock structure, but the cooling tower just produces fuel.

Advanced Generators

Has an interesting multiblock heat exchanger.

Applied Energistics

Electrical Age

Rotary/Electri/Reactorcraft

Series of tech mods based on mechanical, electrical and nuclear energy, respectively.

Mekanism

Binnie’s Mods (Genetics, Botany, ExtraBees/Trees)

The gameplay seems appropriate for any biology we might implement. Might be interesting to integrate ideas from CloneCraft (dead?) into this.

WarpDrive

May be dead, but this lets one build a ship and fly it freely through the cosmos.

Witchery

The most chemical of all of the magic mods. Uses actual chemicals in e.g. distillation.

Thermal Expansion

Induction furnace

Could potentially support enhanced reduction. Currently, sand is supported for flux; presumably the electric current is the reductant. But then this should be called an electric arc furnace. An induction furnace is only for melting.

Pulverizer

Mapping from strength to MJ cost:

StrengthMJ
Weak200
Medium300
Strong450
Very Strong675

EnderIO

Provides TE-like facilities for energy storage, item/liquid/power transfer, etc.

Machines:

Ore Smelter
3 inputs (one more than Induction Smelter), one output.
SAG Mill
Grinder with 4 outputs

Galacticraft

Obvious base for exploration of other worlds.

Thaumcraft

We should add magical aspects to every item, so that we mesh with magic-based gameplay. The ore dictionary should handle this somehow.

Botania

PneumaticCraft

Hydraulicraft

Waila

While we will endeavor to have blocks that rely on rendering rather than GUIs, clarity will be limited. Thus, Waila tooltips may help.

Libraries

Enchiridion

A library for making custom books; we will have a lot of explaining to do. But can they be generated dynamically? Or do we want to use HQM here to interactively guide the player? Guide-API is another option.

Brewing API

Add new brewing recipes and potions. Perhaps useful for primitive chemistry?

Eureka

JSON-based research-based progression system

Easy Multiblock Structures

We will have a lot of these…

Other resources

Forge tutorials

Books

Chemistry

General reference

Inorganic

Organic

Software Design

Chemicals

Definition

A GeoMaterial represents something naturally occuring that is often extracted for industrial uses. Anyway, a GeoMaterial has a specified material and strength, which corresponds to a particular hardness and resistance, upon manifestation of the substance as a GeoBlock.

GeoMaterials are currently aggregates and ores. The aggregates and have no formalized composition, because it is complex and variable. The ores are also technically aggregates; however, they are primarily composed of one material, i.e., sphalerite ore consists of zinc sulfide, plus impurities. We can therefore claim that sphalerite corresponds to impure zinc sulfide. So while not all GeoMaterials have a one-to-one relationship with an impure material, the ores do. We would include non-stoichiometric compounds as “industrial minerals” without any defined chemical composition, so even pure olivine is an opaque mineral.

A true chemical would be produced through purification of an impure material. For example, zinc sulfide would result from extensive processing of sphalerite. While the impure material is obviously not equivalent to the pure substance, they are essentially the same at some level of abstraction. Thus, there could be a link from GeoMaterial to impure material, and from impure material to pure chemical.

Pure chemicals have better defined properties, in particular thermodynamic properties. But even chemicals will not have available values for all of the states. So we need missing/default values. This means that every process will need to handle missing values and do something by default, or nothing.

Obviously chemicals are either elements or compounds. It would be easy to determine whether a compound is a sulfide, oxide, etc, which are so common in ores.

Chemicals can be combined into mixtures.

Phase

A chemical can exist in any phase: solid, liquid, or gas (we ignore the others for now). A chemical species is some physical manifestation of the chemical in a particular process. It has a definite phase. It is manifested in the game as an ItemStack (solid) or FluidStack (liquid/gas). There can be multiple types of Item/Fluid for a given chemical. For example, zinc could be a dust or an ingot; those would be two different items.

Most of the properties of a chemical depend on its phase. An Item/Fluid will know its phase and provide an accessor for the correct properties.

Formulas

The atomic stoichiometry is specified by a formula. Depending on the type of compound, formulae are written in different ways, usually to expose some aspect of their structure. We care about some of these aspects. For example, for salts, we want to know the cation and anion. For organic molecules, we want to know, e.g. the length of the carbon backbone and any (simple) functional groups. A Formula object, perhaps derived separately for salts and organic molecules, could represent such things. Every chemical would have a formula. That formula would refer to the atoms or groups of atoms that compose the compound. At the leaves are AtomicSymbols corresponding to elements, as well as some special cases like electrons and photons.

How does this work? Take an example “Na2SO4”. This formula consists of 2 components: “Na2” and “SO4”. Each of those are obviously formulae. “Na2” specifies the atomic symbol “Na” and a stoichiometry of 2. “SO4” is a molecule that could exist separately as an ion. The formula “SO4” refers to child formulae “S” and “O4”, which are analogous to “Na2”.

What about the elements? Elements are chemicals, and they correspond directly to the atomic symbols used in the formulas. Elements present at least two problems:

  1. How to define their formula?
  2. The Chemical element and the atomic symbol have the same name, which means we cannot import-static into Chemicals for convenient syntax. We cannot use straight Chemicals to define a formula, because a formula is constructed from formula Parts. Unless we explicitly did C._(1). But it is undesirable for any Chemical to become a Part (only elements make sense).

Solutions to #1:

  1. Do not define an explicit formula; instead just take the name of the enum value, and match it to an AtomicSymbol. A null Formula could be interpreted this way.
  2. Like #1, but do away with AtomicSymbol and introduce a circular reference to the Chemical. Also solves problem #2, but would be nice to limit formula parts to atomic symbols.

Solutions to #2:

  1. If we are not allowed to qualify atomic symbols by e.g. “AS” or “E”, then we need to change the name of the Chemical, e.g. “Al” to “Aluminum” or “_Al”. That is lame.
  2. Define the elements in a separate enumeration. Also lame.
  3. Merge AtomicSymbol and the Chemical elements, i.e., get rid of AtomicSymbol and introduce a new enumeration implementing Chemical that defines the elements. Removes that redundancy. It also solves Problem #1 by introducing a reference cycle (but a cleaner one than any old Chemical). Would have to do ._(1) to convert an Element into a Part, or introduce a PartFactory that provides a Part (basically the factory would be something coercible to a Part). Main downside: another enumeration of Chemicals means another set of items, but maybe just the dust?

For convenience, chemicals are listed in a enumeration. This means they have a name, and the formula is natural for their name. This raises a question: do we derive the formula from the name? Parsing might not be too bad, but how to infer salt, vs. something else? It starts to smell like a heuristic. Not deriving the formula from the name means redundancy; more chances to make an error. The problem is that we are dealing with two languages: Java and chemistry. We have to embed the chemical language in Java; using a Java symbol for a formula does not leverage the Java compiler. And for complex cases, it is insufficient; we would need to write things another way. So let us just construct formulae in a systematic way, and then assign to a Java symbol.

We could use some syntactic sugar for declaring formulas. For Fe2O3, this might be:

salt(Fe._(2), O._(3))
salt(Li._(2), mol(S, O._(4)))

And then a reaction:

LiSO4.plus(NaCO3).yields(LiCO3).plus(Na2SO4)

With stoichiometry:

Li2CO3.plus(2, HCl).yields(2, LiCl).plus(CO2).plus(H2O)

With phases:

term(Li2CO3, s).plus(2, HCl, aq).yields(2, LiCl, s).plus(CO2).plus(H2O)

When we specify “aq” as the state, what does it mean? What we are really saying is that we have liquid water with dissolved HCl. And in fact it is somewhat under-specified. We want to model solutions as either dilute or concentrated. So we want something like:

Li2CO3.plus(2, dilute(HCl)).yields(2, LiCl).plus(CO2).plus(H2O)

The dilute (or concentrated) methods will return a new chemical in the liquid state. That is a lot cleaner than borrowing the (aq) convenience from hand-written formulae.

Adjust a formula. Let us consider the use case of replacing “S” with “O” when roasting a sulfide. We want to do something like:

formula.replace(S, O);

Which is just shorthand for:

formula.replace(S._(1), O._(1));

But it seems like we want the formula to be immutable, i.e., the replace method should return a modified copy. Creating an immutable object in Java is tricky, especially with inheritance.

Fluids

We will have a fluid for every gas and every liquid. There is no limit on the number of fluids, and we can use item damage for liquid containers (just need two items, one filled, one empty). The problem is the fluid blocks. To have these chemicals in the world, we will probably need to rely on NBT tags. This means that we can only have a limited number of such blocks in the world. Since we are not generating these in the world, this should be OK. It would be neat to have liquid and gas blocks for every chemical, with pumps and fans moving them around. Not just in pipes. NBT here we come on that one.

Ions

Compounds will dissolve into their ions when added to a solvent, typically water. The properties of dissolved (aqueous) compounds are obviously different from those of the undissolved phases. We can add a new Ion material that refers to the base chemical and the charge (default taken from default oxidation state). It will yield a Thermo object, given a solvent.

We could autogenerate salt metathesis reactions by iterating over the compounds and finding the salts. We get the cation and anion from the compound and exchange the ions. For the reaction to happen, it needs to be driven by a phase change (one of the products is not an aqueous salt). Solubility will inform most cases. We could store a solubility chart: https://en.wikipedia.org/wiki/Solubility_chart. An enumeration will contain a chart for each solvent of interest, starting with water. The cations on the rows, anions on the columns. Or, we just guess solubility from the free energy of solvation.

How do we incorporate salt(aq) terms into a reaction?

  • Add “aqueous” as a physical state. There is some danger that we may end up needing a state for each solvent, but while we might have non-aqueous solutions, it is not likely that we will be running reactions in them.

This means supporting the aqueous state when retrieving properties from a chemical. The thermodynamics and color come from the ions. Hazard comes from the solid? Density would depend on the solution concentration, so is irrelevant to the compound itself. If the aqueous properties object is NULL, then we know the compound is insoluble.

The problem is that we have no way of getting the properties for a specific state, because we currently predict the state from the conditions. Two possibilities for fixing this:

  1. Add a getProperties() method (or adjust the current one) to accept the State (null could indicate inference). Allow Condition does imply the standard states, it is generally impossible to infer the state from the current conditions. But it is largely redundant. This would help resolve a glitch in the current design, where Term knows the state, but Reaction does not use it when computing its properties (all is inferred from the Condition).
  2. Add a notion of aqueous conditions (or more generally, the solvent) to the Condition object. Probably should no longer record the state in Term. All states are inferred from the condition. Since the aqueous condition would span the entire reaction, we could not model dissolution as a reaction. That is probably OK, since it is just a physical change. While the solvent is an aspect of the reaction conditions in an abstract sense, just like reactant concentrations, catalysts, etc, it is different from variables like temperature and pressure. A reaction can occur at a range of temperatures and pressures, while the solvent is more innate. It is always present, just like the catalyst, which we have as part of the reaction, not the condition. So the reaction could store the solvent.

It is not clear whether we should always infer state. There is some value to explicit state declarations. The code is more obvious. It guarantees that we are using the right state when computing reaction properties, such as when finding the equilibrium temperature. A reaction can render itself symbolically without knowing the condition. It also allows us to express state changes as (generalized) reactions, and implicitly represents the solvent (well, water anyway) without extra work and in a way that chemists already use. Finally, the need to pass the state along with the conditions in getProperties() is somewhat justified by kinetics: we cannot know the state of something purely from the temperature and pressure.

None of those arguments supports never inferring state. We often need to do that when auto-generating reactions. Thus, we should probably do both: track the state on Term and add the aqueous notion to the reaction/condition so that we can better guess the state.

Processing of crude materials

Here are some simple rules for ore processing:

  • Grinding an ore yields a dust of a crude material.
  • Smelting the ore block or the result of grinding the ore block should yield the same product, like an ingot.
  • Sulfide ores are roasted to oxides.
  • Hydroxides and carbonates are calcined to oxides.
  • Smelting reduces oxides to the metal.

Let’s review an example: generalized sulfide ore roasting. The recipe registration mechanism (think of it as a recipe compiler) loops over the pure materials. When it finds a sulfide, it knows that roasting (smelting) it will convert the sulfide to an oxide. It finds the corresponding oxide (replaces the S with O in the formula and looks up the corresponding chemical) and registers the recipe. The recipe should apply to both the sulfide chemical and the ore/mineral. That could use the ore dictionary or a more formal relationship between the ore and the chemical. If there is a vent attached to the furnace, it will detect (hopefully) when a sulfide ore is smelted and emit SO2.

Another example: processing of limonite into iron. Limonite is an ore that consists of a mixture of iron hydroxides. Assume it is mostly goethite, FeO(OH). Then, we need to calculate a calcining temperature. There is no exact value, due to impurities, different levels of hydration, etc, so we could specify a rough temperature, similar to the rock hardness. If the calculations are rough, perhaps we could derive the temperatures from a rough notion of the “reactivity” of the metal. Or we could just use thermodynamics. This is a bit tricky at low temperatures, where thermodynamics predicts a temperature below the boiling point of water, so it needs adjustment.

A complication: Ni can be incorporated into goethite (substituting for iron). This is true of many minerals, i.e., while a mineral is not really a mixture, there is non-stoichiometry. The question is whether to consider laterites as goethite (instead of limonite) and model goethite as a crude, non-stoichiometric substance, i.e., not a mixture. The alternative is to say that limonite is a mixture of FeO(OH) and NiO. Another alternative: say that limonite is primarily (an ore of) FeO(OH), but have a recipe/reaction that extracts NiSO4 after treatment with H2SO4 at a specified temperature. We need that reaction anyway, so that sounds reasonable.

Is an ore a mixture? Of course, it’s a special mixture with one component being the “concentrate”, but how to differentiate it from plain old rocks and soil, i.e., aggregates? Have an Aggregate interface, and a SimpleAggregate implementation. Those would correspond to Ore and SimpleOre.

Or what about simply having separate enumerations? One for rocks, one for ores. GeoBlock could still operate over both of them (they would both implement GeoMaterial). Downside: need to reimplement everything. So we either reimplement GeoMaterial or implement the Ore/Aggregate classes. The main objection to having multiple enums is that it seems arbitrary to separate ores and rocks – where does the laterite clay go? The composition is a natural parameter of the material.

Reactions

A reaction is a type of recipe with reactants and products with molar coefficients and states. There are multiple layers of abstraction, best worked out by the process. When a machine receives input items, it needs to map them (by name?) to a recipe. This is a special recipe that has a dynamic reaction model that is controlled and viewed by the machine interface. It yields one or more items as products. This low-level recipe needs to be registered and constructed by some factory. If we have a set of well-described chemicals, the reaction parameters should be determinable from the substances alone. We declare a “reaction” in terms of substances, and that is translated to one or more recipes. So there are two layers: the abstract, process-level description, and the low-level recipes. One abstract process might correspond to multiple recipes (manual, machine, etc).

How does the reaction => recipe mapping occur? There are two steps:

  1. Map the materials to item and fluid stacks
  2. Register recipes that implement the operation

This would be a Registrant object that would store recipes through a RecipeRegistry instance, which interacts with the mods providing the machines (including our own). It is given the registry and a MaterialStacker factory.

When dealing with mixtures, it is not clear that there is always an equivalence between, e.g., a mixture containing a chemical and the chemical itself. Other chemicals in the mixture might also react, bringing about a conflict. We could simply ignore the conflict case. It might also lead to an unecessary explosion in recipes. We really only need the reactions that are important for the canonical process. We could specify reactions with “pass through” reactants representing other mixture components.

At a higher level, the registration code needs to specify the inputs, outputs, condition and energy requirement. Sometimes, the condition and energy requirements can be automatically determined. For reactions, we will often specify the condition, because we do not model the kinetics. But we do model the thermodynamics, so we know the energy. For sizing, condition does not matter, and we can derive energy from the strength. Enthalpy changes (including relevant separations) are computable from thermodynamics. Combination is straightforward.

Do we want compiler type safety for accessing those attributes? The availability of properties is already so varied that we have allowed many of the properties to be null. And through some abstraction and approximation, we can estimate some thermodynamic properties for complex mixtures like crude oil. Why not just push the property accessors to the top-level IndustrialMaterial? We want to retain the semantics of e.g. Chemical vs Mixture, and some behaviors only make sense for one or the other, but many of the same properties apply to both, conceptually. We should only need to distinguish types during construction, so the representation does not need to be specific.

We could take merge ChemicalConditionProperties into ConditionProperties. Vaporizable, Fusible and Soluble get pushed into IndustrialMaterial.

We should parameterize Conversion.Type by the type of material, so so that the .of() factory method requires Chemical for Reaction and Mixture for separation. We could also parameterize Conversion by Converion.Type. Should .of() really accept a MaterialSpec when it is conversion-specific due to its stoichiometry? Maybe we want a MaterialState (Material + State) that is useful for passing between conversions? MaterialStoich would reference a MaterialState.

Block Construction

When creating a GeoBlock from a material, we need to decide who implements the construction. Currently, this is a mix between a static factory method in GeologicaBlocks, and the subclass constructors. Somehow, we should either put most everything inside the constructors or put everything in some sort of factory.

Here are the steps:

  • (factory) ID allocation/assignment, name
  • (constructor) material, creative tab, step sound
  • (constructor) meta blocks
  • (constructor) hardness and resistance

Is this a natural split? The ID allocation should happen up-front. The name then obviously needs to be set by the factory (probably via setter). The material is tied to the subclass (inheritance is used only to define the items dropped). If we know the material, then we know the step sound. The creative tab is always known to be a block.

The hardness/resistance are tied to the strength, and the meta blocks are tied to the material and strength. By putting the meta blocks, hardness/resistance and material into the same, low-level constructor, we ensure that all the values are consistent in terms of the strength. But we could make the block completely agnostic of strength: it would just take the given meta blocks and hardness/resistance, etc. If we then passed the texture file as a parameter, we could get rid of the intact/broken subclasses. But making the blocks agnostic of strength would be tricky, since they are given GeoMaterial objects, which have a strength. Is there a reason to demand such flexibility? Do we really need multiple strategies for finding meta blocks given a strength?

GeoMaterial as an Enum

The GeoMaterial would be convenient as an enum, as long as we do not expect substances to come from some other source. The convenience comes from both the syntax and automatic registration (via reflection). Other mods could add substances, for example. If that happened, there would need to be a configuration system to prevent ID conflicts. Why would they want to add new substances? Probably to take advantage of the chemical modeling. Since IDs are only necessary for meta/damage values, we could introduce an independent object, maybe Chemical, that would simply define a set of chemical properties. It is not yet clear whether we will have a sophisticated chemical model or if we will just add recipes for particular chemicals. If the latter, there may be no benefit to adding new substances. They would just be an internal utility for book-keeping of the meta blocks and items. Since those substances do not have any behaviors, it probably will not be necessary to extend them. They are simple tuples of data.

Substances and blocks, etc

We want to represent substances in the world. For now, let us limit the discussion to geological substances: rocks and minerals. A substance can assume many forms. In the world, it is as an intact block. If the block is broken, it yields a broken form. The granularity of the broken form depends on the intact strength. So weak stone becomes gravel, strong stone becomes cobblestone and very strong stone remains intact.

An intact block for a substance is more or less defined by the following properties:

  • Material/stepSound (from material)
  • Hardness/resistance (from strength)
  • Drop strategy (subclass)

Currently, we use the substance material to do two things: derive the material of the block and select substances for a particular drop strategy (block subclass). This is a problem, because both rocks and minerals can be of the “rock” material, but minerals have a different drop strategy. And direct-drop substances could be rocks, sands, or maybe even dirt or clay. This substance/material type could be a parameter of the substance, or we could imply it by keeping the substances in separate lists. Separate lists would probably mean separate enums, all of which implement some GeoMaterial interface. The separate enums could each have unique qualities. For example, a mineral could reference a chemical. If we did not go the separate list/enum route, every substance would have a chemical field, with non-minerals using a null value. The pain of separate enums is that we would need to reimplement substance for each type. The implementation is not complicated, but it is extra effort. Anyway, it is clear that the material and harvest strategy are two different parameters.

So if wanted to parameterize the drop/harvest strategy, what are the possibilities?

  • a single, broken block (stone)
  • multiple pieces (coal, redstone, clay)
  • self drop (ores, sandstone)

Claystone could follow the sandstone example, which essentially exists in a broken/cobble state. Then a machine like a pulverizer could convert claystone to clay (as it does sandstone to sand). So at this point, we will support the single-broken (stone) and self-drop strategies (minerals).

There are then three parameters:

  • Strength: weak, medium, strong, very strong
  • Harvest: self (default), broken, pieces
  • Material: rock (default), sand

The next debate is whether to add parameters for e.g. the chemical which would be yielded upon pulverizing or smelting a mineral. One issue is that it might become untenable to specify recipes through substance properties. There are so many machines, with so many recipes. Might be simplest to consider the recipes orthogonal. One might try to make the case that we need chemicals in order to add the chemical formula to e.g. a tooltip, or something. But this is not so important.

We could translate the harvest style to a “type” of substance:

  • Rock: broken (cobblestone)
  • Ore: self
  • Crystal: pieces

This makes a lot of sense. Rocks and ores should be a single block; no reason to have individual pieces. And ore does not matter whether it is broken or intact. Crystals though are easily obtained during mining. There is some question as to whether these represent all types of geological substances. If we wanted to support an arbitrary set, we would probably want to use polymorphism instead of a parameter.

Textures

If we use the substance IDs as indexes into the sprite maps, we will need a separate map for every manifestation of the substance. There will be several manifestations: intact (rocks and minerals in native form, metal ingots), broken (cobblestone, pulverized minerals, metal nuggets), and processed (bricks for stone, blocks of metal). As long as we are limited to these three, it makes sense to use a separate file for each. May need a fourth for arbitrary textures.

Processes

Once we have a material, we need to do something with it. That something is a process. A process turns one material, in a specific state, into one or more other materials, in a specific state. Chemical processes are carried out by a series of steps, including physical (unit operations) and chemical (unit processes). Often, physical and chemical steps happen simultaneously, but at our level of abstraction, if there is any chemistry involved that is relevant to the overall process, we represent it with a reaction, otherwise a unit operation.

The set of steps can be modeled as a bipartite graph, with a set of nodes representing the materials (in some particular state) and a set of nodes representing the steps. Edges, at least from a process to a material, can be weighted. The material nodes are very close to being actual blocks and items, because they are in some state, like a dust or ore block. The question becomes whether it is worth representing the process graph explicitly, or if we immediately compile each step down to one or more recipes. For now, we will immediately compile to recipes, but the system is abstract enough to allow for other types of capture.

Multiblocks

Multiblock structures are essentially crafting but with blocks in the world (and thus in 3D). The basic design pattern is that a particular arrangement of blocks is somehow detected, and then a tile entity is established at some position within the structure. The tile entity represents the machine. If the arrangement is disturbed, the machine is disabled, and the tile entity might even be deleted.

The central challenge is detecting the arrangement of blocks and responding to any changes. Strategies include:

  • Blocks responding to their onNeighborBlockChanged() signal, which can only detect adjacent changes,
  • Blocks checking on a timer for whether the structure is satisfied
  • Checking the arrangement when the player uses a tool, like a wrench or magic wand.

The last approach, tool activation, has the advantage of engaging the player — the machine does not convert “magically”, the player has to take some action. But tool activation does not detect later disturbances to the structure.

One solution is to check structural integrity with each “operation”. This brings up the question: how is a multiblock structure different from a particular combination of individual blocks that function together for some purpose? Would such a “federation” of blocks be able to model a single machine?

Consider the blast furnace as an example. A minecart with chest runs over the hopper, which transfers the coke, limestone and ore to a dropper, which drops the items. If the items land on a tuyere block, the coke is consumed to produce fire. If the tuyere block has air to dispense, it does, and the combustion is accelerated (coke is consumed at a higher rate). That fire block is actually a flue gas source block (it is just rendered as fire). The gas will spread through the rest of the furnace, and a vent at the top will capture it. If there is no vent, then the vessel will fill with gas/fire and eventually explode. Fire blocks will slowly spread (converting gas blocks to fire/source blocks), except there is always a layer of gas at the top, against the ceiling. The energy of the coke is used to heat the air, flux and ore. Eventually the temperature is sufficient to produce slag and molten iron by converting the limestone and ore below the fire (on the bottom layer). The temperature model is such that if there is an opening in the furnace, or if there is no air blast (the hotter the better), temperature will never be high enough to produce iron. A finite iron/slag mixture fluid accumulates on the bottom (this will displace the fire block). A drain block then captures the molten product. Since the iron is denser than the slag, a drain on the bottom will emit iron first, while drains on the side emit the mixture. Interesting.

Tasks

Add more minerals

  • State “DONE” from “TODO” [2013-07-22 Mon 17:06]
  • uraninite
  • borax
  • pyrolusite,
  • alunite,
  • malachite
  • glauconite
  • diatomite
  • graphite, kyanite, muscovite
  • soapstone
  • apatite
  • pumice
  • soda ash
  • mirabilite
  • wollastonite
  • zeolite
  • mineral sand deposits to hill biomes

Consider mineral balance (by production)

  • State “DONE” from “TODO” [2013-07-22 Mon 17:07]

Fix rock tool recipes

  • State “DONE” from “TODO” [2013-07-22 Mon 17:07]

Register ores in dictionary

  • State “DONE” from “TODO” [2013-07-22 Mon 17:07]

Add rock grinding, smelting recipes

  • State “DONE” from “TODO” [2013-07-22 Mon 17:07]

Use substitute instead of cloud for primary strata

  • State “DONE” from “TODO” [2013-07-23 Tue 05:19]

Abstract biome restrictions (support BOP)

  • State “DONE” from “TODO” [2014-02-02 Sun 19:10]

Compatibility with GT

http://forum.industrial-craft.net/index.php?page=PMView&pmID=17212&s=dedc43669a7d9e2e9149907f08ddc2d6bf5cb819#pm17212

Figure out Thaumcraft aspects for minerals

Think about a saltpeter/KNO3 farming system

Add GT gem generation

Glauconite sand no longer grindable by GT, hmm

Introduce our own native electrum/silver?

Test dropping of tile entities for host textures

  • State “DONE” from “TODO” [2014-11-19 Wed 05:46]

People hate the new overlays

Use a unique overlay for each ore

  • State “DONE” from “TODO” [2014-11-07 Fri 08:51]

Blocks should render in pass 0 and use a custom block renderer that draws both icons

  • State “DONE” from “TODO” [2014-11-09 Sun 06:45]

Should avoid rendering in front of e.g. potion effects

Improve contrast of realgar texture

  • State “DONE” from “TODO” [2014-11-07 Fri 17:00]

Test realgar and pyrite generation

  • State “DONE” from “TODO” [2014-11-09 Sun 18:05]

Add translations for realgar and pyrite

  • State “DONE” from “TODO” [2014-11-09 Sun 06:46]

Stats

IDNameCountPer ChunkTargetNotes
(222:0)Bauxite2419597.085
(222:3)Brown Limonite327990.960.75
(222:4)Yellow Limonite330920.970.75
(222:5)Vermiculite376811.103
(223:0)Laterite64991419.0212
(224:0)Banded Iron135201539.5630
(224:2)Chromite2194876.427
(224:4)Ilmenite775592.272also in sand
(224:5)Magnetite399501.171.5
(224:6)Pollucite29040.080.05
(224:8)Tantalite291560.850.75
(224:9)Pitchblende611791.791.5
(224:10)Ferrovanadium390671.141.5
(225:1)Bastnasite471141.381.5
(225:2)Chalcopyrite3030148.8710x1.2
(225:3)Garnierite251090.730.5
(225:4)Lepidolite1016672.972.5
(225:5)Magnesite37854411.0810
(225:6)Pentlandite1674174.902/2
(225:7)Scheelite850352.492
(225:8)Sphalerite3205979.3810
(225:9)Wolframite289870.850.5
(225:11)Dolomite58306117.0615
(225:12)Kyanite1019002.982
(226:1)Cinnabar0.00
(226:2)Galena1734035.075
(226:3)Molybdenite630441.841.75also chalco
(226:4)Rock Salt946552.772
(226:5)Stibnite365391.071.5bp Cu/Pb
(226:10)Gypsum2696147.896
(226:12)Mica728372.132
(227:0)Basaltic Sand143770.420.5
(227:1)Garnet Sand437351.281.5
(227:2)Granitic Sand1002082.932.5
(227:3)Quartz Sand273640.800.5
(227:4)Volcanic Ash575821.681.7
(252:0)Limestone1063885303113.05250/10
(252:1)Schist8824584258.22150too much?
(252:2)Serpentinite111519232.63
(252:3)Slate255532174.77
(252:4)Skarn103238030.21
(253:0)Andesite107492431.45
(253:1)Basalt46724413.67
(253:2)Gneiss5143875150.52
(253:3)Granite1272065873722.21
(253:4)Greenschist1630984.77
(253:5)Marble110014632.19
(253:6)Pegmatite88497625.90
(253:7)Rhyolite2948468.63
(254:0)Diorite5888766172.31
(254:1)Gabbro8339424244.02
(254:2)Hornfels316996292.76
(254:3)Peridotite13949406408.18why so much?
(254:4)Quartzite106552131.18
(255:0)Breccia6691198195.79
(255:1)Carbonatite526531.54
(255:2)Claystone5754246168.38
(255:3)Conglomerate5700032166.79
(255:4)Mudstone768335332248.24