minecraft
GregTech

GregTech 6.08.02 地層と地上の鉱石生成について

MOD解析情報という名のただのマイクラ攻略記事です。


背景

これに従って地上世界でイリジウムを探したものの出現する鉱石が全然これに従わないことに気づいた。

上記のリストには地質の情報がないが、このバージョンのGregTechには地層の概念がある。

image.png

そして、以下の経験から実際の地上では全く別のアルゴリズムで鉱石が生成されているのではないかと考えた。


  • 経験上ケルタスクォーツ(Certus Quartz)は必ずが硅岩(Quartzite)の層に出現する

  • 燐灰石(Apatite)はバニラ仕様花崗岩(Granite)の層に現れる

  • Ferberiteという上のリストに存在しない鉱石が現れた

  • 一つの鉱脈に4種類を超える鉱石が大量に出現し、出現高度や組み合わせが表に全く従わなかった

上記の表は恐らくGregの地層が適用できない地上系の世界に適用されて標準のGregでは意味をなさないのだと思う。


コード

どうも地上世界の鉱石生成はgregtech.loaders.b.Loader_Worldgen.run()の上の方にある次のような文がカスタマイズしているようである。

StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.GraniteBlack, new StoneLayerOres[0]));

StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.GraniteBlack, new StoneLayerOres[]{
new StoneLayerOres(OREMATS.Cooperite, 20270250L, 0, 16),
new StoneLayerOres(OREMATS.Sperrylite, 20270250L, 0, 16),
new StoneLayerOres(MT.Ir, 10135125L, 0, 8),
new StoneLayerOres(MT.Emerald, 10135125L, 24, 48, CS.BIOMES_MOUNTAINS),
new StoneLayerOres(MT.Aquamarine, 10135125L, 8, 32, CS.BIOMES_OCEAN_BEACH),
new StoneLayerOres(MT.Morganite, 10135125L, 24, 48, CS.BIOMES_JUNGLE),
new StoneLayerOres(MT.Heliodor, 10135125L, 24, 48, CS.BIOMES_DESERT),
new StoneLayerOres(MT.Goshenite, 10135125L, 24, 48, CS.BIOMES_FROZEN),
new StoneLayerOres(MT.Bixbite, 10135125L, 24, 48, CS.BIOMES_SAVANNA),
new StoneLayerOres(MT.Maxixe, 10135125L, 24, 48, CS.BIOMES_TAIGA)}));

new StoneLayerOresの引数はこんな感じである。

new StoneLayerOres(OREMATS.Cooperite, 20270250L, 0, 16)

// 鉱石の種類 頻度 最小Y(以上)
// 最大Y(以下)

鉱石が設定された地層と同じベースで鉱石がない地層が登録されている。

おそらく同じ種類の石でも鉱石が出る地層と出ない地層があるのだろう。


地上世界のY15を掘っていて、次の層の洞窟にぶちあたった。

StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.SchistBlue, new StoneLayerOres[]{

new StoneLayerOres(MT.Spessartine, 20270250L, 8, 40),
new StoneLayerOres(MT.Pyrope, 20270250L, 16, 48)}));

このとき、自分より上にはPyropeも見えるのに自分より下にはSpessartineしかなかった。多分同じStoneLayerであれば高度があっていれば無条件で生成できるのだと思う。言い換えると、Y44を掘っていてPyrope鉱脈に出会った場合、下に掘っていって同じ地層が続いていれば必ずSpessartineに出会えるのだと思う。

この性質はイリジウム探しに多分有用である。

StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.GraniteBlack, new StoneLayerOres[]{

new StoneLayerOres(OREMATS.Cooperite, 20270250L, 0, 16),
new StoneLayerOres(OREMATS.Sperrylite, 20270250L, 0, 16),
new StoneLayerOres(MT.Ir, 10135125L, 0, 8),

イリジウム鉱脈はBlack GraniteのY0~8に現れるが、そこは溶岩層であり危険である。

しかしY11~16の付近でSperrylite鉱脈を探せば下に掘るとイリジウムが出てくることになるのだ。


リスト

表にするのが難しかったのでコードを成形したものをそのまま貼り付ける。

MODの有無によって変わる場合が多いようである。

// ★stone

/*
* List<StoneLayer> gregapi.worldgen.StoneLayer.LAYERS
*
* gregapi.worldgen.StoneLayer.StoneLayer(
* Block aStone, long aMetaStone,
* Block aCobble, long aMetaCobble,
* Block aMossy, long aMetaMossy,
* OreDictMaterial aMaterial,
* StoneLayerOres... aOres)
*
* gregapi.worldgen.StoneLayerOres.StoneLayerOres(
* OreDictMaterial aMaterial,
* long aChance,
* int aMinY,
* int aMaxY)
*/

StoneLayer.LAYERS.add(new StoneLayer(Blocks.stone, 0L, Blocks.cobblestone, 0L, Blocks.mossy_cobblestone, 0L, MT.Stone, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(Blocks.stone, 0L, Blocks.cobblestone, 0L, Blocks.mossy_cobblestone, 0L, MT.Stone, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(Blocks.stone, 0L, Blocks.cobblestone, 0L, Blocks.mossy_cobblestone, 0L, MT.Stone, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(Blocks.stone, 0L, Blocks.cobblestone, 0L, Blocks.mossy_cobblestone, 0L, MT.Stone, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(Blocks.stone, 0L, Blocks.cobblestone, 0L, Blocks.mossy_cobblestone, 0L, MT.Stone, new StoneLayerOres[] {
MD.Mek.mLoaded ? new StoneLayerOres(MT.FakeOsmium, 20270250L, 30, 60) : null,
MD.RP.mLoaded ? new StoneLayerOres(MT.Nikolite, 10135125L, 0, 20) : null,
MD.BP.mLoaded ? new StoneLayerOres(MT.Teslatite, 10135125L, 0, 20) : null,
MD.PR.mLoaded ? new StoneLayerOres(MT.Electrotine, 10135125L, 0, 20) : null }));
StoneLayer.LAYERS.add(new StoneLayer(Blocks.stone, 0L, Blocks.cobblestone, 0L, Blocks.mossy_cobblestone, 0L, MT.Stone, new StoneLayerOres[] {
MD.ARS.mLoaded ? new StoneLayerOres(MT.Vinteum, 10135125L, 16, 40) : null,
MD.TC.mLoaded ? new StoneLayerOres(MT.InfusedOrder, 10135125L, 24, 40, CS.BIOMES_MAGICAL_GOOD) : null,
MD.TC.mLoaded ? new StoneLayerOres(MT.InfusedWater, 10135125L, 48, 64, CS.BIOMES_MAGICAL_GOOD) : null,
MD.TC.mLoaded ? new StoneLayerOres(MT.InfusedEarth, 10135125L, 0, 16, CS.BIOMES_MAGICAL_GOOD) : null }));
StoneLayer.LAYERS.add(new StoneLayer(Blocks.stone, 0L, Blocks.cobblestone, 0L, Blocks.mossy_cobblestone, 0L, MT.Stone, new StoneLayerOres[] {
MD.TC.mLoaded ? new StoneLayerOres(MT.InfusedEntropy, 10135125L, 24, 40, CS.BIOMES_MAGICAL_GOOD) : null,
MD.TC.mLoaded ? new StoneLayerOres(MT.InfusedAir, 10135125L, 48, 64, CS.BIOMES_MAGICAL_GOOD) : null,
MD.TC.mLoaded ? new StoneLayerOres(MT.InfusedFire, 10135125L, 0, 16, CS.BIOMES_MAGICAL_GOOD) : null }));
StoneLayer.LAYERS.add(new StoneLayer(Blocks.stone, 0L, Blocks.cobblestone, 0L, Blocks.mossy_cobblestone, 0L, MT.Stone, new StoneLayerOres[] {
new StoneLayerOres(MT.Fe2O3, 108108000L, 30, 70),
new StoneLayerOres(MT.Jasper, 10135125L, 40, 64, CS.BIOMES_MOUNTAINS) }));

// ★GraniteBlack

/*
* List<StoneLayer> gregapi.worldgen.StoneLayer.LAYERS
*
* gregapi.worldgen.StoneLayer.StoneLayer(
* Block aStone, long aMetaStone,
* Block aCobble, long aMetaCobble,
* Block aMossy, long aMetaMossy,
* OreDictMaterial aMaterial,
* StoneLayerOres... aOres)
*/

StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.GraniteBlack, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.GraniteBlack, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.GraniteBlack, new StoneLayerOres[] {
new StoneLayerOres(OREMATS.Cooperite, 20270250L, 0, 16),
new StoneLayerOres(OREMATS.Sperrylite, 20270250L, 0, 16),
new StoneLayerOres(MT.Ir, 10135125L, 0, 8),
new StoneLayerOres(MT.Emerald, 10135125L, 24, 48, CS.BIOMES_MOUNTAINS),
new StoneLayerOres(MT.Aquamarine, 10135125L, 8, 32, CS.BIOMES_OCEAN_BEACH),
new StoneLayerOres(MT.Morganite, 10135125L, 24, 48, CS.BIOMES_JUNGLE),
new StoneLayerOres(MT.Heliodor, 10135125L, 24, 48, CS.BIOMES_DESERT),
new StoneLayerOres(MT.Goshenite, 10135125L, 24, 48, CS.BIOMES_FROZEN),
new StoneLayerOres(MT.Bixbite, 10135125L, 24, 48, CS.BIOMES_SAVANNA),
new StoneLayerOres(MT.Maxixe, 10135125L, 24, 48, CS.BIOMES_TAIGA) }));

// ★GraniteRed

StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.GraniteRed, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.GraniteRed, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.GraniteRed, new StoneLayerOres[] {
new StoneLayerOres(OREMATS.Pitchblende, 20270250L, 0, 18),
new StoneLayerOres(OREMATS.Uraninite, 20270250L, 0, 16),
new StoneLayerOres(OREMATS.Tantalite, 40540500L, 20, 50) }));

// ★Komatiite

StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Komatiite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Komatiite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Komatiite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Komatiite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Komatiite, new StoneLayerOres[] {
new StoneLayerOres(OREMATS.Magnesite, 40540500L, 20, 50),
new StoneLayerOres(OREMATS.Cinnabar, 54054000L, 0, 32),
new StoneLayerOres(MT.Redstone, 81081000L, 0, 30),
new StoneLayerOres(MT.Pyrite, 54054000L, 0, 30) }));

// ★Basalt

Block tBlock = ST.block(MD.GaSu, "basalt");
if (tBlock != CS.NB) {
/*
* gregapi.worldgen.StoneLayer.StoneLayer(
* Block aStone, long aMetaStone,
* OreDictMaterial aMaterial,
* StoneLayerOres... aOres)
*/

StoneLayer.LAYERS.add(new StoneLayer(tBlock, 0L, MT.Basalt, new StoneLayerOres[0]));
} else {
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Basalt, new StoneLayerOres[0]));
}
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Basalt, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Basalt, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Basalt, new StoneLayerOres[] {
new StoneLayerOres(OREMATS.Bastnasite, 27027000L, 24, 32),
new StoneLayerOres(MT.Monazite, 20270250L, 24, 32),
new StoneLayerOres(MT.MnO2, 81081000L, 16, 48) }));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Basalt, new StoneLayerOres[] {
new StoneLayerOres(MT.Olivine, 20270250L, 0, 32),
new StoneLayerOres(MT.Uvarovite, 20270250L, 8, 40),
new StoneLayerOres(MT.Grossular, 20270250L, 16, 48),
new StoneLayerOres(OREMATS.Chromite, 81081000L, 32, 64) }));

// ★Marble

tBlock = ST.block(MD.CHSL, "marble");
if (tBlock != CS.NB) {
StoneLayer.LAYERS.add(new StoneLayer(tBlock, 0L, MT.Marble, new StoneLayerOres[0]));
} else {
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Marble, new StoneLayerOres[0]));
}
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Marble, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Marble, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Marble, new StoneLayerOres[] {
new StoneLayerOres(MT.Dioptase, 10135125L, 24, 48, CS.BIOMES_MOUNTAINS) }));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Marble, new StoneLayerOres[] {
new StoneLayerOres(OREMATS.Cassiterite, 40540500L, 40, 80),
new StoneLayerOres(OREMATS.Stannite, 40540500L, 38, 82),
new StoneLayerOres(OREMATS.Kesterite, 40540500L, 38, 82),
new StoneLayerOres(OREMATS.Sphalerite, 81081000L, 10, 30),
new StoneLayerOres(OREMATS.Chalcopyrite, 81081000L, 0, 20),
new StoneLayerOres(MT.Pyrite, 54054000L, 0, 30) }));

// ★Limestone

tBlock = ST.block(MD.CHSL, "limestone");
if (tBlock != CS.NB) {
StoneLayer.LAYERS.add(new StoneLayer(tBlock, 0L, MT.Limestone, new StoneLayerOres[0]));
} else {
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Limestone, new StoneLayerOres[0]));
}
tBlock = ST.block(MD.BoP, "rocks");
if (tBlock != CS.NB) {
StoneLayer.LAYERS.add(new StoneLayer(tBlock, 0L, MT.Limestone, new StoneLayerOres[0]));
} else {
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Limestone, new StoneLayerOres[0]));
}
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Limestone, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Limestone, new StoneLayerOres[] {
new StoneLayerOres(MT.Pyrite, 40540500L, 0, 30),
new StoneLayerOres(OREMATS.Arsenopyrite, 40540500L, 0, 20),
new StoneLayerOres(OREMATS.Galena, 81081000L, 5, 25),
new StoneLayerOres(OREMATS.Stibnite, 27027000L, 10, 30),
new StoneLayerOres(OREMATS.Powellite, 27027000L, 30, 50),
new StoneLayerOres(OREMATS.Molybdenite, 5067562L, 30, 50),
new StoneLayerOres(OREMATS.Tetrahedrite, 81081000L, 40, 80),
new StoneLayerOres(MT.Cu, 40540500L, 40, 80) }));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Limestone, new StoneLayerOres[] {
new StoneLayerOres(OREMATS.Scheelite, 10135125L, 0, 16),
new StoneLayerOres(OREMATS.Wolframite, 10135125L, 0, 16),
new StoneLayerOres(OREMATS.Ferberite, 10135125L, 0, 16),
new StoneLayerOres(OREMATS.Huebnerite, 10135125L, 0, 16),
new StoneLayerOres(OREMATS.Tungstate, 10135125L, 0, 16),
new StoneLayerOres(OREMATS.YellowLimonite, 81081000L, 16, 48),
new StoneLayerOres(OREMATS.BrownLimonite, 81081000L, 32, 64),
new StoneLayerOres(OREMATS.Malachite, 54054000L, 16, 64) }));

// ★SchistGreen

StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.SchistGreen, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.SchistGreen, new StoneLayerOres[] {
new StoneLayerOres(MT.Andradite, 20270250L, 8, 40),
new StoneLayerOres(MT.Almandine, 20270250L, 16, 48) }));

// ★SchistBlue

StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.SchistBlue, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.SchistBlue, new StoneLayerOres[] {
new StoneLayerOres(MT.Spessartine, 20270250L, 8, 40),
new StoneLayerOres(MT.Pyrope, 20270250L, 16, 48) }));

// ★Kimberlite

StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Kimberlite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Kimberlite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Kimberlite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Kimberlite, new StoneLayerOres[] {
new StoneLayerOres(MT.Diamond, 5067562L, 0, 12),
new StoneLayerOres(MT.Spinel, 10135125L, 24, 48, CS.BIOMES_MOUNTAINS),
new StoneLayerOres(MT.BalasRuby, 10135125L, 24, 48, CS.BIOMES_JUNGLE) }));

// ★Quartzite

StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Quartzite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Quartzite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Quartzite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Quartzite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Quartzite, new StoneLayerOres[] {
new StoneLayerOres(MT.CertusQuartz, 40540500L, 16, 48),
new StoneLayerOres(OREMATS.Barite, 20270250L, 0, 32) }));

// ★Granite

tBlock = ST.block(MD.BoP, "rocks");
if (tBlock != CS.NB) {
StoneLayer.LAYERS.add(new StoneLayer(tBlock, 4L, MT.Shale, new StoneLayerOres[0]));
} else {
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Granite, new StoneLayerOres[0]));
}
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Granite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Granite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Granite, new StoneLayerOres[] {
new StoneLayerOres(MT.BlueTopaz, 10135125L, 8, 32, CS.BIOMES_OCEAN_BEACH),
new StoneLayerOres(MT.Topaz, 10135125L, 24, 48, CS.BIOMES_FROZEN) }));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Granite, new StoneLayerOres[] {
new StoneLayerOres(MT.Apatite, 81081000L, 32, 64),
new StoneLayerOres(MT.PO4, 27027000L, 36, 60),
new StoneLayerOres(MT.Phosphorite, 27027000L, 40, 56),
new StoneLayerOres(MT.Phosphorus, 27027000L, 44, 52) }));

// ★Diorite

tBlock = ST.block(MD.BoP, "rocks");
if (tBlock != CS.NB) {
StoneLayer.LAYERS.add(new StoneLayer(tBlock, 2L, MT.Siltstone, new StoneLayerOres[0]));
} else {
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Diorite, new StoneLayerOres[0]));
}
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Diorite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Diorite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Diorite, new StoneLayerOres[] {
new StoneLayerOres(MT.Sapphire, 10135125L, 24, 48, CS.BIOMES_FROZEN),
new StoneLayerOres(MT.GreenSapphire, 10135125L, 24, 48, CS.BIOMES_JUNGLE),
new StoneLayerOres(MT.YellowSapphire, 10135125L, 24, 48, CS.BIOMES_MOUNTAINS),
new StoneLayerOres(MT.OrangeSapphire, 10135125L, 24, 48, CS.BIOMES_SAVANNA),
new StoneLayerOres(MT.BlueSapphire, 10135125L, 8, 32, CS.BIOMES_OCEAN_BEACH),
new StoneLayerOres(MT.PurpleSapphire, 10135125L, 24, 48, CS.BIOMES_TAIGA),
new StoneLayerOres(MT.Ruby, 10135125L, 24, 48, CS.BIOMES_DESERT) }));

StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Diorite, new StoneLayerOres[] {
new StoneLayerOres(OREMATS.Garnierite, 81081000L, 16, 48),
new StoneLayerOres(OREMATS.Pentlandite, 81081000L, 24, 56),
new StoneLayerOres(OREMATS.Cobaltite, 81081000L, 32, 64),
new StoneLayerOres(MT.Craponite, 10135125L, 24, 48, CS.BIOMES_JUNGLE),
new StoneLayerOres(MT.Amethyst, 10135125L, 24, 48, CS.BIOMES_TAIGA),
new StoneLayerOres(MT.Alexandrite, 10135125L, 24, 48, CS.BIOMES_JUNGLE) }));

// ★Andesite

StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Andesite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Andesite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Andesite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Andesite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Andesite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Andesite, new StoneLayerOres[] {
new StoneLayerOres(OREMATS.Bromargyrite, 81081000L, 0, 20) }));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Andesite, new StoneLayerOres[] {
new StoneLayerOres(MT.Au, 20270250L, 0, 20) }));

// ★UB MODの地層

if (MD.UB.mLoaded) {
// gregapi.worldgen.StoneLayer.StoneLayer(
// Block aStone, long aMetaStone,
// Block aCobble, long aMetaCobble,
// Block aMossy, long aMetaMossy,
// OreDictMaterial aMaterial,
// StoneLayerOres... aOres)
Block i = ST.block(MD.UB, "igneousStone");
Block j = ST.block(MD.UB, "igneousCobblestone");
StoneLayer.LAYERS.add(new StoneLayer(i, 8L, j, 0L, j, 0L, MT.GraniteRed, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 9L, j, 1L, j, 1L, MT.GraniteBlack, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 10L, j, 2L, j, 2L, MT.Rhyolite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 11L, j, 3L, j, 3L, MT.Andesite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 12L, j, 4L, j, 4L, MT.Gabbro, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 13L, j, 5L, j, 5L, MT.Basalt, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 14L, j, 6L, j, 6L, MT.Komatiite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 15L, j, 7L, j, 7L, MT.Dacite, new StoneLayerOres[0]));
i = ST.block(MD.UB, "metamorphicStone");
j = ST.block(MD.UB, "metamorphicCobblestone");
StoneLayer.LAYERS.add(new StoneLayer(i, 8L, j, 0L, j, 0L, MT.Gneiss, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 9L, j, 1L, j, 1L, MT.Eclogite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 10L, j, 2L, j, 2L, MT.Marble, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 11L, j, 3L, j, 3L, MT.Quartzite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 12L, j, 4L, j, 4L, MT.Blueschist, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 13L, j, 5L, j, 5L, MT.Greenschist, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 14L, j, 6L, j, 6L, MT.Soapstone, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 15L, j, 7L, j, 7L, MT.Migmatite, new StoneLayerOres[0]));
i = ST.block(MD.UB, "sedimentaryStone");
StoneLayer.LAYERS.add(new StoneLayer(i, 8L, (Block) null, 0L, (Block) null, 0L, MT.Limestone, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 9L, (Block) null, 0L, (Block) null, 0L, MT.Chalk, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 10L, (Block) null, 0L, (Block) null, 0L, MT.Shale, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 11L, (Block) null, 0L, (Block) null, 0L, MT.Siltstone, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 12L, (Block) null, 0L, (Block) null, 0L, MT.Lignite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 13L, (Block) null, 0L, (Block) null, 0L, MT.Dolomite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 14L, (Block) null, 0L, (Block) null, 0L, MT.Greywacke, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(i, 15L, (Block) null, 0L, (Block) null, 0L, MT.Chert, new StoneLayerOres[0]));
}

//謎

// boolean gregapi.worldgen.StoneLayer.put(Block aTop, Block aBottom, StoneLayerOres... aOreChances)
// boolean gregapi.worldgen.StoneLayer.put(Block aTop, long aMetaTop, Block aBottom, long aMetaBottom, StoneLayerOres... aOreChances)
// gregapi.worldgen.StoneLayerOres.StoneLayerOres(OreDictMaterial aMaterial, long aChance, int aMinY, int aMaxY)
StoneLayer.put(BlocksGT.Basalt, BlocksGT.Limestone, new StoneLayerOres[] {
new StoneLayerOres(OREMATS.Ilmenite, 81081000L, 0, 32),
new StoneLayerOres(MT.TiO2, 54054000L, 0, 32) });
StoneLayer.put(BlocksGT.Basalt, BlocksGT.Marble, new StoneLayerOres[] {
new StoneLayerOres(MT.Zr, 10135125L, 0, 32) });
StoneLayer.put(BlocksGT.Basalt, 0L, BlocksGT.RockOres, 2L, new StoneLayerOres[] {
new StoneLayerOres(OREMATS.Zeolite, 81081000L, 16, 48) });
StoneLayer.put(BlocksGT.Basalt, 0L, BlocksGT.RockOres, 3L, new StoneLayerOres[] {
new StoneLayerOres(OREMATS.Lepidolite, 54054000L, 16, 48),
new StoneLayerOres(OREMATS.Spodumene, 54054000L, 32, 64) });
StoneLayer.put(BlocksGT.Diorite, BlocksGT.Limestone, new StoneLayerOres[] {
new StoneLayerOres(MT.Opal, 10135125L, 48, 64) });
StoneLayer.put(BlocksGT.Limestone, 0L, BlocksGT.RockOres, 2L, new StoneLayerOres[] {
new StoneLayerOres(OREMATS.Borax, 81081000L, 16, 48) });
StoneLayer.put(BlocksGT.Limestone, 0L, BlocksGT.RockOres, 3L, new StoneLayerOres[] {
new StoneLayerOres(MT.KIO3, 54054000L, 32, 64) });
StoneLayer.put(BlocksGT.GraniteBlack, BlocksGT.Marble, new StoneLayerOres[] {
new StoneLayerOres(MT.Lapis, 81081000L, 0, 48),
new StoneLayerOres(MT.Sodalite, 40540500L, 0, 48),
new StoneLayerOres(MT.Lazurite, 40540500L, 0, 48),
new StoneLayerOres(MT.Pyrite, 40540500L, 0, 48) });
StoneLayer.put(BlocksGT.GraniteBlack, BlocksGT.Basalt, new StoneLayerOres[] {
new StoneLayerOres(MT.Diamond, 10135125L, 0, 32),
new StoneLayerOres(MT.Graphite, 81081000L, 0, 32) });


BlocksGT.RockOres

RockOresは岩塩や褐炭などの母岩の概念がない鉱石ブロックである。

Meta
種類

0
Anthracite Coal

1
Lignite Coal

2
Salt

3
Rock Salt

4
Bauxite

5
Oil Shale

これらの鉱石は、通常の鉱石のように岩石の中に水玉状に点々と生成されるのではなくレイヤーの一種としてどちゃっと配置される。

通常のレイヤーは StoneLayer.LAYERS に追加されるが、これらの鉱石のレイヤーは StoneLayer.put 経由で StoneLayer.MAP に追加されるようだ。


見方

Graniteの鉱石コードを例にとる。

// ★Granite

// (1)
tBlock = ST.block(MD.BoP, "rocks");
if (tBlock != CS.NB) {
StoneLayer.LAYERS.add(new StoneLayer(tBlock, 4L, MT.Shale, new StoneLayerOres[0]));
} else {
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Granite, new StoneLayerOres[0]));
}

// (2)
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Granite, new StoneLayerOres[0]));
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Granite, new StoneLayerOres[0]));

// (3)
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Granite, new StoneLayerOres[] {
new StoneLayerOres(MT.BlueTopaz, 10135125L, 8, 32, CS.BIOMES_OCEAN_BEACH),
new StoneLayerOres(MT.Topaz, 10135125L, 24, 48, CS.BIOMES_FROZEN) }));

// (4)
StoneLayer.LAYERS.add(new StoneLayer(BlocksGT.Granite, new StoneLayerOres[] {
new StoneLayerOres(MT.Apatite, 81081000L, 32, 64),
new StoneLayerOres(MT.PO4, 27027000L, 36, 60),
new StoneLayerOres(MT.Phosphorite, 27027000L, 40, 56),
new StoneLayerOres(MT.Phosphorus, 27027000L, 44, 52) }));

(1)では、BoPというMODの"rocks"というブロックを取ってきて、それがCS.NBであるか否かで処理を分けている。真であればShaleを何かするが、偽であれば普通のGraniteの地層を追加する。

(2)では何も鉱脈にならないハズレを2個追加している。

(3)では砂浜のY8~32にブルートパーズが生成され、凍土のY24~48にトパーズが生成される地層を追加している。それ以外のバイオームや高度ではこれらの鉱脈が生成されなくなるのでハズレ地層として振る舞う。

(4)ではすべてのバイオームにおいてY32~64に渡ってリン鉱石を4種類生成する地層を1個追加している。浅い海面下であれば鉱脈となる。


合計で5個の地層があり、そのうち1個がリン鉱脈となる。すなわち、Y40を掘っていてGraniteの地層に遭遇した場合、20%の確率でそれはリン鉱脈である。そしてそうであった場合、頭上を掘って同じ地層がもう少し続いていたならば、Phosphorus鉱石を見つけることができる。


謎レイヤー

追記:謎レイヤーが表す鉱脈に遭遇した

StoneLayer.put(BlocksGT.Diorite, BlocksGT.Limestone, new StoneLayerOres[] {

new StoneLayerOres(MT.Opal, 10135125L, 48, 64) });

2019-01-20_00.42.39.png

どうもその二つの母岩が交わる場所に、双方のブロックを置換して生成するらしい?

通常の鉱脈は隣接するレイヤーにはみ出して鉱石を生成させることはないため、同一種類の鉱石が複数種類の母岩を持つことはない。おそらく母岩レイヤーの生成と同時に鉱石ブロックも配置している。

しかしこれらの二重レイヤー鉱脈は多分通常のレイヤーが生成された後に処理が行われるようだ。図のDioriteレイヤー側はCobaltite鉱脈であった。また、通常のレイヤーは砂利の中に鉱石を生まないが、二重レイヤー鉱脈は砂利の中にも鉱石を生む。


追記:表も作った

カテゴリとグループは繋げて読む。カテゴリとグループの組が同じ行はまとめて一つのレイヤーとして登録される。レイヤー列はそのレイヤーの母岩となる石の種類である。

鉱石の列が空の行は、そのレイヤーに鉱石が何も生成されないことを表す。鉱石列はその隣の頻度・minY・maxYに従って分布する。頻度は、原文でchanceとなっている引数の値をExcelで =ROUND(x/5067562*3,0) したものである。

前提MODとバイオームは、その鉱石が出現する条件を表す。なので前提MODとバイオームは鉱石を表す列が存在する行にだけ記入されている。バイオームは英大文字で書かれている。

条件の項目にはそのレイヤーが出現する条件を表す。条件を満たさない場合、そのレイヤーは登録されない。条件は鉱石を表す列がない行にだけ記入されている。条件は日本語で書かれている。

カテゴリ     グループ レイヤー                鉱石           頻度 minY maxY 前提MOD バイオーム/条件             

Stone 1 Stone
Stone 2 Stone
Stone 3 Stone
Stone 4 Stone
Stone 5 Stone FakeOsmium 12 30 60 Mek
Stone 5 Stone Nikolite 6 0 20 RP
Stone 5 Stone Teslatite 6 0 20 BP
Stone 5 Stone Electrotine 6 0 20 PR
Stone 6 Stone Vinteum 6 16 40 ARS
Stone 6 Stone InfusedOrder 6 24 40 TC MAGICAL_GOOD
Stone 6 Stone InfusedWater 6 48 64 TC MAGICAL_GOOD
Stone 6 Stone InfusedEarth 6 0 16 TC MAGICAL_GOOD
Stone 7 Stone InfusedEntropy 6 24 40 TC MAGICAL_GOOD
Stone 7 Stone InfusedAir 6 48 64 TC MAGICAL_GOOD
Stone 7 Stone InfusedFire 6 0 16 TC MAGICAL_GOOD
Stone 8 Stone Fe2O3 64 30 70
Stone 8 Stone Jasper 6 40 64 MOUNTAINS
GraniteBlack 1 GraniteBlack
GraniteBlack 2 GraniteBlack
GraniteBlack 3 GraniteBlack Cooperite 12 0 16
GraniteBlack 3 GraniteBlack Sperrylite 12 0 16
GraniteBlack 3 GraniteBlack Ir 6 0 8
GraniteBlack 3 GraniteBlack Emerald 6 24 48 MOUNTAINS
GraniteBlack 3 GraniteBlack Aquamarine 6 8 32 OCEAN_BEACH
GraniteBlack 3 GraniteBlack Morganite 6 24 48 JUNGLE
GraniteBlack 3 GraniteBlack Heliodor 6 24 48 DESERT
GraniteBlack 3 GraniteBlack Goshenite 6 24 48 FROZEN
GraniteBlack 3 GraniteBlack Bixbite 6 24 48 SAVANNA
GraniteBlack 3 GraniteBlack Maxixe 6 24 48 TAIGA
GraniteRed 1 GraniteRed
GraniteRed 2 GraniteRed
GraniteRed 3 GraniteRed Pitchblende 12 0 18
GraniteRed 3 GraniteRed Uraninite 12 0 16
GraniteRed 3 GraniteRed Tantalite 24 20 50
Komatiite 1 Komatiite
Komatiite 2 Komatiite
Komatiite 3 Komatiite
Komatiite 4 Komatiite
Komatiite 5 Komatiite Magnesite 24 20 50
Komatiite 5 Komatiite Cinnabar 32 0 32
Komatiite 5 Komatiite Redstone 48 0 30
Komatiite 5 Komatiite Pyrite 32 0 30
Basalt 1 GaSuのbasalt GaSuのbasaltが存在する場合
Basalt 1 Basalt そうでない場合
Basalt 2 Basalt
Basalt 3 Basalt
Basalt 4 Basalt Bastnasite 16 24 32
Basalt 4 Basalt Monazite 12 24 32
Basalt 4 Basalt MnO2 48 16 48
Basalt 5 Basalt Olivine 12 0 32
Basalt 5 Basalt Uvarovite 12 8 40
Basalt 5 Basalt Grossular 12 16 48
Basalt 5 Basalt Chromite 48 32 64
Marble 1 CHSLのmarble CHSLのmarbleが存在する場合
Marble 1 Marble そうでない場合
Marble 2 Marble
Marble 3 Marble
Marble 4 Marble Dioptase 6 24 48 MOUNTAINS
Marble 5 Marble Cassiterite 24 40 80
Marble 5 Marble Stannite 24 38 82
Marble 5 Marble Kesterite 24 38 82
Marble 5 Marble Sphalerite 48 10 30
Marble 5 Marble Chalcopyrite 48 0 20
Marble 5 Marble Pyrite 32 0 30
Limestone 1 CHSLのlimestone CHSLのlimestoneが存在する場合
Limestone 1 Limestone そうでない場合
Limestone 2 BoPのrocks BoPのrocksが存在する場合
Limestone 2 Limestone そうでない場合
Limestone 3 Limestone
Limestone 4 Limestone Pyrite 24 0 30
Limestone 4 Limestone Arsenopyrite 24 0 20
Limestone 4 Limestone Galena 48 5 25
Limestone 4 Limestone Stibnite 16 10 30
Limestone 4 Limestone Powellite 16 30 50
Limestone 4 Limestone Molybdenite 3 30 50
Limestone 4 Limestone Tetrahedrite 48 40 80
Limestone 4 Limestone Cu 24 40 80
Limestone 5 Limestone Scheelite 6 0 16
Limestone 5 Limestone Wolframite 6 0 16
Limestone 5 Limestone Ferberite 6 0 16
Limestone 5 Limestone Huebnerite 6 0 16
Limestone 5 Limestone Tungstate 6 0 16
Limestone 5 Limestone YellowLimonite 48 16 48
Limestone 5 Limestone BrownLimonite 48 32 64
Limestone 5 Limestone Malachite 32 16 64
SchistGreen 1 SchistGreen
SchistGreen 2 SchistGreen Andradite 12 8 40
SchistGreen 2 SchistGreen Almandine 12 16 48
SchistBlue 1 SchistBlue
SchistBlue 2 SchistBlue Spessartine 12 8 40
SchistBlue 2 SchistBlue Pyrope 12 16 48
Kimberlite 1 Kimberlite
Kimberlite 2 Kimberlite
Kimberlite 3 Kimberlite
Kimberlite 4 Kimberlite Diamond 3 0 12
Kimberlite 4 Kimberlite Spinel 6 24 48 MOUNTAINS
Kimberlite 4 Kimberlite BalasRuby 6 24 48 JUNGLE
Quartzite 1 Quartzite
Quartzite 2 Quartzite
Quartzite 3 Quartzite
Quartzite 4 Quartzite
Quartzite 5 Quartzite CertusQuartz 24 16 48
Quartzite 5 Quartzite Barite 12 0 32
Granite 1 BoPのrocks:4 BoPのrocksが存在する場合
Granite 1 Granite そうでない場合
Granite 2 Granite
Granite 3 Granite
Granite 4 Granite BlueTopaz 6 8 32 OCEAN_BEACH
Granite 4 Granite Topaz 6 24 48 FROZEN
Granite 5 Granite Apatite 48 32 64
Granite 5 Granite PO4 16 36 60
Granite 5 Granite Phosphorite 16 40 56
Granite 5 Granite Phosphorus 16 44 52
Diorite 1 BoPのrocks:2 BoPのrocksが存在する場合
Diorite 1 Diorite そうでない場合
Diorite 2 Diorite
Diorite 3 Diorite
Diorite 4 Diorite Sapphire 6 24 48 FROZEN
Diorite 4 Diorite GreenSapphire 6 24 48 JUNGLE
Diorite 4 Diorite YellowSapphire 6 24 48 MOUNTAINS
Diorite 4 Diorite OrangeSapphire 6 24 48 SAVANNA
Diorite 4 Diorite BlueSapphire 6 8 32 OCEAN_BEACH
Diorite 4 Diorite PurpleSapphire 6 24 48 TAIGA
Diorite 4 Diorite Ruby 6 24 48 DESERT
Diorite 5 Diorite Garnierite 48 16 48
Diorite 5 Diorite Pentlandite 48 24 56
Diorite 5 Diorite Cobaltite 48 32 64
Diorite 5 Diorite Craponite 6 24 48 JUNGLE
Diorite 5 Diorite Amethyst 6 24 48 TAIGA
Diorite 5 Diorite Alexandrite 6 24 48 JUNGLE
Andesite 1 Andesite
Andesite 2 Andesite
Andesite 3 Andesite
Andesite 4 Andesite
Andesite 5 Andesite
Andesite 6 Andesite Bromargyrite 48 0 20
Andesite 7 Andesite Au 12 0 20
UB 1 UBのigneousStone:8 UB Modを導入している場合
UB 2 UBのigneousStone:9 UB Modを導入している場合
UB 3 UBのigneousStone:10 UB Modを導入している場合
UB 4 UBのigneousStone:11 UB Modを導入している場合
UB 5 UBのigneousStone:12 UB Modを導入している場合
UB 6 UBのigneousStone:13 UB Modを導入している場合
UB 7 UBのigneousStone:14 UB Modを導入している場合
UB 8 UBのigneousStone:15 UB Modを導入している場合
UB 9 UBのmetamorphicStone:8 UB Modを導入している場合
UB 10 UBのmetamorphicStone:9 UB Modを導入している場合
UB 11 UBのmetamorphicStone:10 UB Modを導入している場合
UB 12 UBのmetamorphicStone:11 UB Modを導入している場合
UB 13 UBのmetamorphicStone:12 UB Modを導入している場合
UB 14 UBのmetamorphicStone:13 UB Modを導入している場合
UB 15 UBのmetamorphicStone:14 UB Modを導入している場合
UB 16 UBのmetamorphicStone:15 UB Modを導入している場合
UB 17 UBのsedimentaryStone:8 UB Modを導入している場合
UB 18 UBのsedimentaryStone:9 UB Modを導入している場合
UB 19 UBのsedimentaryStone:10 UB Modを導入している場合
UB 20 UBのsedimentaryStone:11 UB Modを導入している場合
UB 21 UBのsedimentaryStone:12 UB Modを導入している場合
UB 22 UBのsedimentaryStone:13 UB Modを導入している場合
UB 23 UBのsedimentaryStone:14 UB Modを導入している場合
UB 24 UBのsedimentaryStone:15 UB Modを導入している場合


検索方法

例えばトパーズの大鉱脈が欲しい場合、Topazで検索する。Graniteの地層にnew StoneLayerOres(MT.Topaz, 10135125L, 24, 48, CS.BIOMES_FROZEN) })という項目が見つかる。なので、まず凍土系バイオームを地上を歩き回って探し、地下を掘ってY24~48の中でGraniteの地層を探せばよい。見つかった場合、20%の確率でトパーズの大鉱脈に出会うことができる。

特定のMODが条件になっている場合などいろいろあるので、そこらへんはコードを参照して空気を読む。

イリジウム鉱石がMT.Ir、PyrolusiteがMT.MnO2と書かれているように、一部のマテリアルは元素記号で検索しなければならないことに注意。