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


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

# 背景

- GregTech 6.08.02　大鉱脈リスト - Qiita https://qiita.com/MirrgieRiana/items/fca65bf2d785f4792449

これに従って地上世界でイリジウムを探したものの出現する鉱石が全然これに従わないことに気づいた。
上記のリストには地質の情報がないが、このバージョンのGregTechには地層の概念がある。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/280627/2e42ce39-627f-efa4-1746-0cb0460166e6.png)

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

- 経験上ケルタスクォーツ（Certus Quartz）は必ずが硅岩（Quartzite）の層に出現する
- 燐灰石（Apatite）はバニラ仕様花崗岩（Granite）の層に現れる
- Ferberiteという上のリストに存在しない鉱石が現れた
- 一つの鉱脈に4種類を超える鉱石が大量に出現し、出現高度や組み合わせが表に全く従わなかった

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

# コード

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

```java:
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`の引数はこんな感じである。

```java:
new StoneLayerOres(OREMATS.Cooperite, 20270250L, 0, 16)
//                 鉱石の種類          頻度        最小Y（以上）
//                                                  最大Y（以下）
```

鉱石が設定された地層と同じベースで鉱石がない地層が登録されている。
おそらく同じ種類の石でも鉱石が出る地層と出ない地層があるのだろう。

----

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

```java:
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に出会えるのだと思う。

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

```java:
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の有無によって変わる場合が多いようである。

```java:
// ★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の鉱石コードを例にとる。

```java:
// ★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鉱石を見つけることができる。

## 謎レイヤー

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

```java:
StoneLayer.put(BlocksGT.Diorite, BlocksGT.Limestone, new StoneLayerOres[] {
	new StoneLayerOres(MT.Opal, 10135125L, 48, 64) });
```

![2019-01-20_00.42.39.png](https://qiita-image-store.s3.amazonaws.com/0/280627/8dede3ff-5c8f-bb94-ea40-5bf262253fb0.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`と書かれているように、一部のマテリアルは元素記号で検索しなければならないことに注意。