Minecraft 1.12.2　村建物一覧


村に建つ建物の見た目と内部名の対応。

関連クラス

- `net.minecraft.world.gen.structure.MapGenVillage`
- `net.minecraft.world.gen.structure.StructureVillagePieces`

# 村の構造物リスト

## 建物

`StructureVillagePiece#getStructureVillageWeightedPieceList`に載っているリスト。

- House1
- House2
- House3
- House4Garden
- WoodHut
- Hall
- Church
- Field1
- Field2

## 建物以外の村構造物

`StructureVillagePiece#registerVillagePieces`に載っているリスト。

- Start（Wellの子クラス）
- Well
- Path
- Torch

# 一覧

`StructureVillagePiece#getStructureVillageWeightedPieceList`を改造して特定の生成物のみを出せるようにした。ただし道などの建物以外のものは普通に生成される。道と建物の生成アルゴリズムは異なる。

画像には内装を見せるために一部破壊してある建物があるので、そこは雰囲気で察してほしい。

以下ではすべて平原バイオームでの姿について記述する。バイオームによっては形状は大して変わらないが建材が変化する。

## House1　本棚のある家

![2018-09-21_08.08.06.png](https://qiita-image-store.s3.amazonaws.com/0/280627/7ef91fbc-d07d-c3c6-feb7-c9f9a568059a.png)

House1は本棚のある家である。板ガラスの窓・ドア・ソファー・机・クラフティングテーブルと色々豪華である。その割に光源がないのはなぜなのか。

----

あとなぜか玄関先の階段が生成されないことがある。

![2018-09-21_08.11.53.png](https://qiita-image-store.s3.amazonaws.com/0/280627/43292032-b0ce-5b4b-342f-26ad4ce09875.png)

## House2　鍛冶場

![2018-09-21_08.30.43.png](https://qiita-image-store.s3.amazonaws.com/0/280627/28fa561e-0b5e-89f2-fd6d-eccd4c8b3f82.png)

House2は鍛冶場である。恐らく村の建物の中では最も嬉しい。鍛冶場にはチェスト・板ガラスの窓・ソファー・机・かまど・溶岩・鉄柵が置かれている。ドアはない。

--

House2にはバリエーションはないが、チェストの内容は変化する。チェストにはダイヤなどの有用なアイテムがごろごろしている。

![2018-09-21_08.31.24.png](https://qiita-image-store.s3.amazonaws.com/0/280627/0f01e89f-9f0c-9525-61fe-1700a4184faf.png)

チェストは`net.minecraft.world.gen.structure.StructureComponent#generateChest`で生成されている。このときのRandomはこのHouse2に与えられたRandomを使用するため、同じ形状の村の同じ場所のHouse2には同じ内容のアイテムが入っていることになる。

シードが分かればおそらく世界中の村の座標・村の形状・鍛冶場のチェストの中身までは地形を実際に生成することなくかなりの速度で予測できる。逆に言うとその世界でどこに行けば有用なチェストに巡り合えるかが分かる。

## House3　ダンスルームみたいな家

![2018-09-21_08.44.35.png](https://qiita-image-store.s3.amazonaws.com/0/280627/c3be3518-dc72-680a-325d-bd86ea3c01c6.png)

House3はなんもない家である。松明とドアが付いているという優秀な点はあるものの光源が不十分で湧き場だらけだ。しかし内部が広いためプレイヤーが利用するには色々使いやすい。個人的にはこっちの方がHallっぽい。

House3にはバリエーションはない。

## House4Garden　キューブな家

![2018-09-21_07.54.36.png](https://qiita-image-store.s3.amazonaws.com/0/280627/cd66967e-a04f-9f6e-58f3-184462242cb3.png)

House4Gardenは小さい普通の家である。3x3の内装に板ガラスの窓を持ち、床は丸石で、ドアはない。`isRoofAccessible`（屋根にアクセス可能か否か）というバリエーションがあり、trueの場合ははしごと屋根のフェンスが追加される。

なぜこれがGarden（庭園）と呼ばれているのだろうか。ちなみに`getStructureVillageWeightedPiec`内では最初に出現する建物であり、村の実装初期に作られた感が強い。

## WoodHut　トイレみたいな家

![2018-09-21_08.14.00.png](https://qiita-image-store.s3.amazonaws.com/0/280627/d3bb5c85-3550-7505-104a-29b908e7e8de.png)

WoodHutは直訳すると木の掘っ立て小屋。掘立小屋のくせに板ガラスの窓とドアと机があってHouse4Gardenよりも優れた部分がある。

----

この建物は`isTallHouse`（屋根の高さ）と`tablePosition`（机の位置）という2系統のバリエーションが存在する。

![2018-09-21_08.20.33.png](https://qiita-image-store.s3.amazonaws.com/0/280627/5962353b-0b0a-71e2-bead-1c7511889d0d.png)

`isTallHouse`がtrueだと屋根の6ブロックが1段高い位置に生成される。内装は変わらない。`tablePosition`は0,1,2のどれかの値を取り、0だと机が生成されない。1の場合は入って左に、2の場合は入って右に生成される。

たまに雑草が茂っているが、これは多分床が土なので後天的に草が生えた結果である。

## Hall　庭付きの家

![2018-09-21_08.25.19.png](https://qiita-image-store.s3.amazonaws.com/0/280627/7b08deff-56cd-9f5c-03f5-6c618a6a0efc.png)

Hallは庭のある家である。板ガラスの窓・2個のドア・光源・石の机（台所？）・ソファーと机があってかなり豪華だ。特に室内が湧き潰しされた家というのはかなり珍しい。

House4Gardenという単語を見たときに「あああれか」と思ったのがこれであったが、実際には違った。

この建物にバリエーションはない。

## Church　教会

![2018-09-21_08.01.22.png](https://qiita-image-store.s3.amazonaws.com/0/280627/6fb10d82-f27f-693e-fa20-7d5cc3b32111.png)

Churchは丸石造りのドアのある2階建て＋屋上の教会である。バリエーションはない。板ガラスの窓があり、松明が付けられている。2階と屋上へはハシゴでアクセスできる。

## Field1　ダブルな畑

![2018-09-21_08.48.49.png](https://qiita-image-store.s3.amazonaws.com/0/280627/2336d0d1-0535-29a2-74ea-7e885ed1c3f7.png)

Field1は2個で1セットになった畑である。4列ある畑に対応する4つのパラメータが存在し、各パラメータは小麦・人参・じゃがいも・ビートルートのうちのどれかになる。

----

作物の出現率には以下の重みがある。

- 小麦　50%
- 人参　20%
- じゃがいも　20%
- ビートルート　10%

----

この建物とField2は村人を生成しない。そのほかの家系7種類はすべて村人を生成する。

## Field2　シングルな畑

![2018-09-21_08.55.56.png](https://qiita-image-store.s3.amazonaws.com/0/280627/dde92960-46bd-71bb-9dc2-eb070d23d13a.png)

Field2は単体の畑である。2個のパラメータが左右2列の畑に対応し、作物の生成確率はField1と同じである。そのほかの点もField1との差は大してない。

## Well　井戸

![2018-09-21_09.06.27.png](https://qiita-image-store.s3.amazonaws.com/0/280627/937d95b7-2e7a-e73b-ffda-406c7009e084.png)

Well（井戸）は扱い的には村の始点に生成される特殊な物体でありその他の道の脇に建つ建物とは扱いが異なる。

井戸は必ずチャンクの中央からややずれたあたりに建っている。なので多くのチャンクに生成されるようにすると横の村と位置が綺麗に揃う。

ところで井戸は6x6のサイズなのに道は幅が奇数になっているせいでずれてしまっているが良いのか村人。

## Path　道

![2018-09-21_09.28.20.png](https://qiita-image-store.s3.amazonaws.com/0/280627/b4952214-4790-d792-474b-8265cde06e4e.png)

Pathは道である。Pathは`length`（長さ）のパラメータを持っている。画像の中央には単純な十字の道があるが、これは4本のPathである。Pathは脇に建物をくっつけたり、枝分新たなPathを生成する能力がある。

## Torch　街灯

![2018-09-21_09.31.04.png](https://qiita-image-store.s3.amazonaws.com/0/280627/2edf802d-908c-7a73-60bf-5855500d526e.png)

Torchは道の脇に出現するが建物の扱いではない。Torchは道と同じく、村に生成される建物に付随して設置されていく。Torchにはバリエーションはない。

Torchの生成条件はいまいちよく探せなかったが、畑2個しかない村には全然現れず大都市には大量に出現した。

# 識別方法

家の種類を空から区別する方法

## 家系

### 大きな家

- House1　本棚のある家
    - 大きめの家の中では唯一庭も折れ曲がった屋根もない
- House3　ダンスルームみたいな家
    - 部屋が折れ曲がっているのが屋根にも反映されている
- Hall　庭付きの家
    - 庭が目印

### 小さい家

- House4Garden　キューブな家
    - 5x5の正方形
- WoodHut　トイレみたいな家
    - 屋根がすべて原木である
    - 柱が原木である
    - 4x5の長方形

### 石造りの家

- House2　鍛冶場
    - 目立つのですぐわかる
- Church　教会
    - 目立つのですぐわかる

## 畑系

- Field1　ダブルな畑
- Field2　シングルな畑
    - シングルな畑がぴったりくっついても境界には原木が2列分連続するはずなのでわかる。


# 生成コード

建物の種類リスト実際のから村の構造物のリストを作るまでの過程は`net.minecraft.world.gen.structure.MapGenVillage.Start.Start(World worldIn, Random rand, int x, int z, int size)`に書いてある。

さらに、Minecraftの構造物が枝を伸ばしていく過程は`
net.minecraft.world.gen.structure.StructureComponent.buildComponent(StructureComponent componentIn, List<StructureComponent> listIn, Random rand)`の記述される。村の場合は井戸と道路に枝分かれポイントが存在する。枝分かれポイントがないパーツはこのメソッドを叩いても何もしない。

ここでいう枝分かれとは構造物が別の構造物を誘発することである。なので道から畑ができることも枝分かれとする。

## 井戸の枝分かれ

井戸は4方向に確定で道を伸ばす。

## 道の枝分かれ

道は脇に確率で次々と建物を生成できる。道は脇を2個持っている。建物は一つの脇に複数出現することができる。

そして、道が建物を1個以上生成できたとき、道は先端から左右に確率で直角に新たな道を分岐できる。何の建物も面していない道の先が折れ曲がることはない。

## その他の構造物の枝分かれ

井戸と道以外に枝分かれする構造物はない。