
この記事はJava版のデータパック・ワールド生成を触りたい方向けです
統合版(BE)とは仕様が異なるので注意してください
マイクラJava版1.21.1以降を前提に、構造物セットの読み方を解説します
こんにちは。ゆずかきです。
マイクラJava版でデータパックを触っていると、worldgen/structure_set というフォルダを見かけることがあります。
名前だけ見ると「構造物そのもののデータかな?」と思いやすいのですが、実際は少し違います。
構造物セットは、村・古代都市・試練の間・ネザー要塞などを、どの間隔で、どの候補から、どの重みで生成候補にするかを決める配置側のデータです。
ここを理解できると、
- 構造物の生成間隔を調整できる
- 村や古代都市などの生成候補の意味が分かる
spacingやseparationの見方で混乱しなくなる- 自作構造物をワールドに自然生成させる時の基礎が分かる
…という感じで、データパック制作やワールド生成の理解が一気に進みます。
この記事では、構造物セットとは何か?配置間隔はどう読むのか?生成候補のweightは何を意味するのか?を、できるだけ実用寄りに整理して解説しますね。
※本記事はマイクラJava版の構造物セット仕様をもとにしています。
※バージョン差が出やすい分野なので、実際に編集する場合は対象バージョンの展開済みデータも確認してください。
※この記事ではJava版1.21.1以降の読み方を中心に解説します。
目次
1. 構造物セットとは?
2. structure_setが置かれている場所
3. 構造物セットの基本構造
4. 配置間隔を決めるplacementの読み方
5. random_spreadのspacingとseparationを解説
6. 生成候補structuresとweightの考え方
7. バニラ構造物セットの配置間隔一覧
8. 1.21.1以降で見ておきたい試練の間の構造物セット
9. 自作構造物でstructure_setを作る時の注意点
10. よくある勘違いとトラブル対策
11. まとめ
12. 参考文献
この記事で分かること
・マイクラJava版の構造物セットの役割
・spacing、separation、salt、weightの意味
・村、古代都市、試練の間などの配置間隔の読み方
・自作構造物を自然生成させる時に失敗しやすいポイント

1. 構造物セットとは?
構造物セットとは、ひとことで言うと、構造物をワールド内のどこに生成候補として置くかを決めるデータです。
ここで大事なのは、構造物セットは建物の中身そのものではないという点です。
たとえば村で考えると、
- 村の建物パーツ
- 村の道
- 村人の家の配置
- 平原の村、砂漠の村、サバンナの村などの種類
こういう「構造物の中身」は、別のデータで管理されています。
一方で構造物セットは、
- 村をどのくらいの間隔で生成候補にするか
- 生成候補になった時、どの村タイプを候補にするか
- 村同士が近づきすぎないようにするか
- 前哨基地を村の近くに出しにくくするか
こういう配置ルール側を担当します。
つまり、構造物セットは「建築物の設計図」ではなく、ワールド生成時の出現ルール表みたいな存在ですね。
重要ポイント
structure_setを編集しても、建物の形そのものは変わりません。
変わるのは、主に「どこに」「どれくらいの間隔で」「どの候補が」生成されるかです。
個人的にはここを最初に理解しておくと、マイクラのワールド生成データがかなり読みやすくなると思います。

2. structure_setが置かれている場所
Java版のデータパックで構造物セットを追加・上書きする場合、基本的には以下の場所にJSONファイルを置きます。
data/<namespace>/worldgen/structure_set/<ファイル名>.json
たとえば、自作の塔を example:tall_tower という名前で生成させたい場合、構造物セットはこんな場所になります。
data/example/worldgen/structure_set/tall_towers.json
バニラの構造物セットであれば、たとえば村は下記のようなイメージです。
data/minecraft/worldgen/structure_set/villages.json
ここで注意したいのが、structure_set と structure は別物ということです。
| データ | 主な役割 | 見るポイント |
|---|---|---|
| structure_set | 構造物の配置ルール | spacing、separation、候補、weight |
| structure | 構造物側の設定 | 生成できるバイオーム、生成ステップなど |
| template_pool | ジグソー構造物のパーツ候補 | 建物パーツ、重み、接続先 |
| structure | 実際の構造物NBT | 保存された建築データ |
初心者さんが混乱しやすいのは、名前が似ているからです。
structure_setは配置ルール、worldgen/structureは構造物本体側の設定と覚えておけば大丈夫です。
なお、Java版1.21以降で実際の .nbt 構造物データを置くフォルダは、data/<namespace>/structure/ です。古い解説では structures と書かれていることがありますが、1.21以降では単数形の structure を使います。

3. 構造物セットの基本構造
構造物セットのJSONは、大きく分けて2つの要素でできています。
{ "structures": [ { "structure": "minecraft:village_plains", "weight": 1 } ], "placement": { "type": "minecraft:random_spread", "spacing": 34, "separation": 8, "salt": 10387312 } }
見るべきところは、主に下記です。
structures:生成候補になる構造物リストstructure:候補にする構造物IDweight:候補として選ばれる重みplacement:配置ルールtype:配置方式spacing:生成試行の平均間隔separation:生成試行同士の最小距離salt:ワールドシードと組み合わせて位置を決めるための値
この時点で大事なのは、spacingやseparationは「実際に建物が必ず生成される距離」ではないということです。
あくまで、ワールド生成時に「このあたりで生成を試してみよう」という生成試行地点のルールです。
たとえば村の構造物セットに spacing: 34 と書かれていても、必ず34チャンクごとに村が出るわけではありません。
その場所のバイオーム条件、地形、構造物側の設定なども通る必要があります。
体験的に覚えるなら
structure_setは「候補地を決める係」
structureは「そこで生成して良いか判断する係」
という感じで分けると分かりやすいです。

4. 配置間隔を決めるplacementの読み方
placement は、構造物セットの中でも一番大事な部分です。
ここで、構造物の配置方式や間隔が決まります。
Java版の構造物セットで主に使われる配置方式は、下記の2種類です。
| type | 使われ方 | 代表例 |
|---|---|---|
| minecraft:random_spread | 一定の区画ごとにランダム寄りで生成候補を置く | 村、古代都市、試練の間、廃坑など |
| minecraft:concentric_rings | スポーン地点周辺から輪のように候補を置く | 要塞 |
ほとんどの構造物は minecraft:random_spread です。
村、砂漠の寺院、古代都市、試練の間、難破船、海底神殿、森の洋館など、多くの構造物がこの方式です。
一方で、要塞は特殊です。
Java版の要塞は、ワールド内に最大128個生成される特殊な構造物で、minecraft:concentric_rings というリング状の配置方式を使います。
placementでよく見る項目
placement 内でよく出てくる項目をまとめると、下記のようになります。
| 項目 | 意味 | 注意点 |
|---|---|---|
| type | 配置方式 | random_spreadかconcentric_rings |
| spacing | 生成試行地点同士の平均間隔 | 単位はチャンク |
| separation | 生成試行地点同士の最小距離 | spacing以下にする |
| salt | 配置位置をずらすための値 | 構造物ごとに別の値推奨 |
| frequency | 生成を試す確率 | 実際の生成率そのものではない |
| exclusion_zone | 別の構造物セットの近くを避ける | 前哨基地と村などで使われる |
| spread_type | 候補位置の散らばり方 | linearまたはtriangular |
frequency は特に勘違いしやすいです。
たとえば frequency: 0.2 と書いてあっても、「必ず20%の確率で建物が完成する」という意味ではありません。
あくまで、条件を満たした時に生成を試す確率です。
その後にバイオーム条件や地形条件があるため、実際の体感出現率とはズレます。

5. random_spreadのspacingとseparationを解説
構造物セットで一番重要なのが、spacing と separation です。
この2つを理解できると、構造物の出現間隔をかなり読みやすくなります。
spacingとは?
spacing は、生成試行地点同士の平均間隔です。
単位はブロックではなく、チャンクです。
1チャンクは16×16ブロックなので、たとえば spacing: 34 なら、単純計算では34チャンク=544ブロックです。
34チャンク × 16ブロック = 544ブロック
ただし、これは「必ず544ブロックごとに生成される」という意味ではありません。
random_spread は、一定サイズの区画ごとに候補地点を作るような仕組みなので、実際の距離にはブレがあります。
separationとは?
separation は、隣り合う生成試行地点が近づきすぎないための最小距離です。
こちらも単位はチャンクです。
たとえば、村の構造物セットでは下記のようになっています。
"placement": { "type": "minecraft:random_spread", "salt": 10387312, "separation": 8, "spacing": 34 }
この場合、村の生成候補は平均34チャンク間隔で試され、近すぎる候補が出ないように最低8チャンク分の余白を持たせるようなイメージです。
spacingとseparationを変えるとどうなる?
実際にデータパックで構造物の出現率を変える時は、だいたいこの2つを触ります。
| 変更内容 | 起きやすい変化 | 注意点 |
|---|---|---|
| spacingを小さくする | 構造物が出やすくなる | 増やしすぎるとワールドがごちゃつく |
| spacingを大きくする | 構造物がレアになる | 探すのが大変になる |
| separationを小さくする | 近くに出る可能性が上がる | 密集しすぎることがある |
| separationを大きくする | 近すぎる生成候補を避けやすい | spacing以下にする必要あり |
初心者さん向けに言うなら、構造物を増やしたいならspacingを下げる、減らしたいならspacingを上げると覚えると分かりやすいです。
ただし、極端に小さくしすぎるのはおすすめしません。
構造物の生成試行が増えると、ワールド生成が重くなったり、地形が不自然になったり、別の構造物と干渉しやすくなります。
注意!
spacingとseparationは、実際の建物同士の確定距離ではありません。
あくまで「生成試行地点」の間隔です。ここを間違えると、調整結果が想像とズレます。

6. 生成候補structuresとweightの考え方
structures は、その構造物セットで候補になる構造物を並べる場所です。
たとえば村の構造物セットでは、下記の5種類が候補になります。
"structures": [ { "structure": "minecraft:village_plains", "weight": 1 }, { "structure": "minecraft:village_desert", "weight": 1 }, { "structure": "minecraft:village_savanna", "weight": 1 }, { "structure": "minecraft:village_snowy", "weight": 1 }, { "structure": "minecraft:village_taiga", "weight": 1 } ]
この場合、候補としては、
- 平原の村
- 砂漠の村
- サバンナの村
- 雪原の村
- タイガの村
が入っています。
すべて weight: 1 なので、構造物セット内の重みとしては同じ扱いです。
ただし、ここも注意が必要です。
weightが同じだから、全バイオームで5種類の村が均等に出るという意味ではありません。
実際には、各構造物側のバイオーム条件があります。
砂漠の村は砂漠系、平原の村は平原系、というように、最終的には構造物側の条件も見られます。
weightが分かりやすい例:ネザー複合構造物
生成候補の重みが分かりやすいのが、ネザー要塞と砦の遺跡です。
バニラでは nether_complexes という構造物セット内で、下記のように候補が並んでいます。
"structures": [ { "structure": "minecraft:fortress", "weight": 2 }, { "structure": "minecraft:bastion_remnant", "weight": 3 } ]
この場合、構造物セット上の重みは、
- ネザー要塞:2
- 砦の遺跡:3
です。
単純に候補の重みだけ見ると、砦の遺跡の方が少し選ばれやすい設定になっています。
ただし、これも「必ずその比率で目に見える数になる」という意味ではありません。
実際の生成では、バイオームや地形、生成可能条件も絡みます。
ここ大事です
weightは「候補として選ばれる重み」です。
実際にワールド内で見つかる数の保証ではありません。

7. バニラ構造物セットの配置間隔一覧
ここでは、Java版1.21系のバニラ構造物セットを読む時に、特に見ておきたいものをまとめます。
単位はすべてチャンクです。
| 構造物セット | 代表構造物 | spacing | separation | 補足 |
|---|---|---|---|---|
| villages | 村 | 34 | 8 | 5種類の村が候補 |
| trial_chambers | 試練の間 | 34 | 12 | Java版1.21系で重要 |
| ancient_cities | 古代都市 | 24 | 8 | ディープダーク側の条件も影響 |
| trail_ruins | 旅路の遺跡 | 34 | 8 | 対応バイオームで生成 |
| desert_pyramids | 砂漠の寺院 | 32 | 8 | 砂漠系で生成 |
| igloos | イグルー | 32 | 8 | 雪原系で生成 |
| jungle_temples | ジャングルの寺院 | 32 | 8 | ジャングル系で生成 |
| swamp_huts | 沼地の小屋 | 32 | 8 | ウィッチトラップ関係で重要 |
| shipwrecks | 難破船 | 24 | 4 | 通常版と座礁版が候補 |
| ocean_ruins | 海底遺跡 | 20 | 8 | 暖かい海・冷たい海の候補 |
| ocean_monuments | 海底神殿 | 32 | 5 | spread_typeはtriangular |
| woodland_mansions | 森の洋館 | 80 | 20 | かなりレア |
| end_cities | エンドシティ | 20 | 11 | spread_typeはtriangular |
| nether_complexes | ネザー要塞・砦の遺跡 | 27 | 4 | 要塞weight2、砦の遺跡weight3 |
| ruined_portals | 荒廃したポータル | 40 | 15 | 複数バリエーションが候補 |
| pillager_outposts | ピリジャーの前哨基地 | 32 | 8 | 村の近くを避ける設定あり |
この表を見る時のコツは、spacingが小さいほど生成試行は多く、spacingが大きいほどレア寄りということです。
ただ、古代都市の spacing: 24 を見て「村より多いはず」と考えるのは少し危険です。
古代都市は対応するバイオーム条件もかなり強く影響するため、実際の探索では簡単に見つからないことがあります。
逆に、森の洋館は spacing: 80 なので、構造物セットの時点でもかなり遠めに設定されています。
これはサバイバルで探す時の体感とも合いやすいですね。
前哨基地のexclusion_zoneについて
ピリジャーの前哨基地は、村と少し関係があります。
構造物セット内に exclusion_zone があり、村の構造物セットの近くを避けるような設定が入っています。
これは、前哨基地が村のすぐ近くに毎回ベタ付けで出るようなことを避けるためのルールです。
ただし、完全に「村の周辺には絶対出ない」という話ではありません。
あくまで構造物セットの配置ルール上、近すぎる候補を避けるための設定です。

8. 1.21.1以降で見ておきたい試練の間の構造物セット
Java版1.21系で特に見ておきたい構造物が、試練の間です。
試練の間は trial_chambers という構造物セットで管理されています。
代表的な配置設定は下記です。
{ "placement": { "type": "minecraft:random_spread", "salt": 94251327, "separation": 12, "spacing": 34 }, "structures": [ { "structure": "minecraft:trial_chambers", "weight": 1 } ] }
村と同じく spacing: 34 ですが、separation は12です。
村の separation: 8 と比べると、試練の間の方が生成試行地点同士の最低距離がやや広めに取られています。
ただし、これも「村と同じくらい見つかる」という意味ではありません。
試練の間は地下構造物なので、実際の探索では地図やコマンド、地下探索の進め方によって体感がかなり変わります。
プレイ上の見方
spacingだけを見ると村と近い数値ですが、試練の間は地下構造物です。
普通に歩いているだけでは見えないので、体感では村より見つけにくく感じやすいです。
1.21.1以降の注意点
Java版1.21.1以降でも、構造物セットの基本的な読み方は変わりません。
structures で候補を持ち、placement で配置間隔を決める、という考え方で読めます。
ただし、マイクラはアップデートでワールド生成データが変わることがあります。
そのため、実際にデータパックで上書きする場合は、必ず自分が遊ぶバージョンのバニラデータを確認してください。
特に、
- 新しい構造物が追加された時
- 既存構造物の生成間隔が変わった時
- データパックのpack_formatが変わった時
- worldgen関連の仕様変更が入った時
このあたりは要確認です。
注意!
古いバージョンの記事を見てそのままJSONを作ると、読み込みエラーや生成されない原因になります。
Java版はデータパック仕様が変わることがあるので、対象バージョン確認は必須です。

9. 自作構造物でstructure_setを作る時の注意点
ここからは、自作構造物を自然生成させたい方向けの内容です。
自作構造物で構造物セットを作る時は、最低限この3つを意識しましょう。
structuresに正しい構造物IDを書くplacementのspacingとseparationを極端にしすぎないsaltは他の構造物セットと被らない値にする
例:自作の塔を生成候補にする
たとえば、example:tower という構造物を自然生成させたい場合、構造物セットは下記のような形になります。
{ "structures": [ { "structure": "example:tower", "weight": 1 } ], "placement": { "type": "minecraft:random_spread", "spacing": 32, "separation": 8, "salt": 123456789 } }
これで、構造物セットとしては「32チャンク間隔くらいで example:tower を生成候補にする」という意味になります。
ただし、これだけで必ず生成されるとは限りません。
別途、worldgen/structure 側で、
- どのバイオームに生成できるか
- どの生成ステップで生成するか
- 地形への適応をどうするか
- ジグソー構造物ならtemplate_poolが正しいか
なども設定する必要があります。
また、構造物本体の .nbt ファイルを使う場合は、Java版1.21以降では data/<namespace>/structure/ に置きます。
saltは被らせない方が安全
salt は、ワールドシードと組み合わせて構造物の候補位置を決めるための値です。
自作構造物を複数追加する場合、同じ salt を使い回すのは避けた方が安全です。
同じような配置位置になり、構造物同士が重なったり、変に近い場所に出たりする原因になります。
おすすめ
自作構造物ごとに、適当な大きい整数を別々に設定しましょう。
既存のバニラ構造物と同じsaltをそのまま使い回すのも避けた方が無難です。
spacingを小さくしすぎない
テスト中は、構造物を見つけやすくするために spacing を小さくしたくなります。
これは悪くないのですが、公開用データパックでそのままにすると、構造物が多すぎてワールドが不自然になります。
特に、
- 大型建築
- 地下構造物
- 生成パーツ数が多いジグソー構造物
- モブやチェストを含む構造物
こういう構造物は、出しすぎるとワールド生成が重くなったり、探索バランスが崩れやすいです。
テスト用と公開用で数値を分けるのがおすすめです。

10. よくある勘違いとトラブル対策
最後に、構造物セットでよくある勘違いを整理します。
勘違い1:spacingは建物同士の距離ではない
一番多い勘違いがこれです。
spacing: 32 と書くと「32チャンクごとに建物がある」と思いがちですが、実際はそうではありません。
これは生成試行地点の平均間隔です。
候補地点が作られても、バイオームや構造物側の条件が合わなければ生成されません。
勘違い2:weightを上げれば必ず多く見つかる
weight は候補内で選ばれる重みです。
そのため、候補が複数ある場合には意味があります。
ただし、構造物が1種類しかない場合に weight: 100 にしても、基本的には大きな意味はありません。
出現頻度を変えたいなら、主に見るべきは placement 側です。
勘違い3:structure_setだけ作れば自作構造物が生成される
構造物セットは、あくまで配置ルールです。
自作構造物を自然生成させるには、構造物側の定義も必要になります。
最低限、
worldgen/structureworldgen/structure_set- 必要に応じて
worldgen/template_pool - 実際の
.nbt構造物データを置くstructure
このあたりが噛み合っていないと生成されません。
勘違い4:/locateで出ないから壊れているとは限らない
/locate structure で見つからない場合でも、すぐに壊れているとは限りません。
よくある原因は、
- 対応バイオームが近くにない
structure側のbiomes指定が狭いspacingが広すぎるfrequencyが低すぎる- JSONのID指定が間違っている
- データパックを入れた後に
/reloadしていない - 既に生成済みのチャンクを見ている
このあたりです。
特に最後の「生成済みチャンク」は見落としがちです。
ワールド生成データを変えても、すでに生成された地形が自動で作り直されるわけではありません。
新しく生成されるチャンクで確認しましょう。
チェックリスト
どうしても構造物が生成されない時は、下記を見直してみてください。
- [ ]
data/<namespace>/worldgen/structure_set/にJSONを置いているか? - [ ]
structures内のstructureIDは正しいか? - [ ]
worldgen/structure側のファイルも存在しているか? - [ ] 実際の
.nbt構造物データをdata/<namespace>/structure/に置いているか? - [ ]
spacingとseparationの関係は正しいか? - [ ]
separationがspacingより大きくなっていないか? - [ ]
saltを使い回しすぎていないか? - [ ] 対応バイオームが近くにあるか?
- [ ]
/reloadまたはワールド再読み込みをしたか? - [ ] 新規チャンクで確認しているか?
このチェックを通せば、かなりの原因は潰せます。

11. まとめ
今回は、マイクラJava版の構造物セットについて解説しました。
要点を整理すると、
structure_setは構造物の中身ではなく、配置ルール側のデータstructuresには生成候補になる構造物IDとweightを書くplacementで配置方式、生成間隔、saltなどを決める- 多くの構造物は
minecraft:random_spreadを使う spacingは生成試行地点の平均間隔で、単位はチャンクseparationは生成試行地点同士の最小距離weightは候補として選ばれる重みで、実際の出現数を保証するものではない- Java版1.21系では、試練の間は
trial_chambersとして構造物セットに定義されている
こんな感じです。
構造物セットは、最初に見るとJSONばかりで難しそうに見えます。
でも、実際に読んでみると、かなり役割がはっきりしています。
どの構造物を、どのくらいの間隔で、どの候補から生成するか。
まずはここだけ押さえれば大丈夫です。
自作データパックで構造物を自然生成させたい方は、まずバニラの villages.json や trial_chambers.json を見て、同じ形で自分の構造物セットを作ってみると理解しやすいと思います。
では、本日はここまでで終わります。
最後までご覧いただき、ありがとうございました。
柚子クラでは他にもマイクラJava版の仕様解説・便利装置・データパック関連の記事をまとめているので、ぜひご覧くださいね(^^♪

12. 参考文献
この記事を書くにあたり、以下のページを参考にしています。