【マイクラ】構造物セットとは?配置間隔・生成候補・データ仕様を解説【Java版】

この記事はJava版のデータパック・ワールド生成を触りたい方向けです
統合版(BE)とは仕様が異なるので注意してください
マイクラJava版1.21.1以降を前提に、構造物セットの読み方を解説します

こんにちは。ゆずかきです。

マイクラJava版でデータパックを触っていると、worldgen/structure_set というフォルダを見かけることがあります。

名前だけ見ると「構造物そのもののデータかな?」と思いやすいのですが、実際は少し違います。

構造物セットは、村・古代都市・試練の間・ネザー要塞などを、どの間隔で、どの候補から、どの重みで生成候補にするかを決める配置側のデータです。

ここを理解できると、

  • 構造物の生成間隔を調整できる
  • 村や古代都市などの生成候補の意味が分かる
  • spacingseparation の見方で混乱しなくなる
  • 自作構造物をワールドに自然生成させる時の基礎が分かる

…という感じで、データパック制作やワールド生成の理解が一気に進みます。

この記事では、構造物セットとは何か?配置間隔はどう読むのか?生成候補の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版の構造物セットの役割
spacingseparationsaltweight の意味
・村、古代都市、試練の間などの配置間隔の読み方
・自作構造物を自然生成させる時に失敗しやすいポイント


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_setstructure は別物ということです。

データ 主な役割 見るポイント
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:候補にする構造物ID
  • weight:候補として選ばれる重み
  • 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を解説

構造物セットで一番重要なのが、spacingseparation です。

この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を上げると覚えると分かりやすいです。

ただし、極端に小さくしすぎるのはおすすめしません。

構造物の生成試行が増えると、ワールド生成が重くなったり、地形が不自然になったり、別の構造物と干渉しやすくなります。

注意!
spacingseparation は、実際の建物同士の確定距離ではありません。
あくまで「生成試行地点」の間隔です。ここを間違えると、調整結果が想像とズレます。


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を書く
  • placementspacingseparation を極端にしすぎない
  • 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/structure
  • worldgen/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 内の structure IDは正しいか?
  • [ ] worldgen/structure 側のファイルも存在しているか?
  • [ ] 実際の .nbt 構造物データを data/<namespace>/structure/ に置いているか?
  • [ ] spacingseparation の関係は正しいか?
  • [ ] separationspacing より大きくなっていないか?
  • [ ] salt を使い回しすぎていないか?
  • [ ] 対応バイオームが近くにあるか?
  • [ ] /reload またはワールド再読み込みをしたか?
  • [ ] 新規チャンクで確認しているか?

このチェックを通せば、かなりの原因は潰せます。


11. まとめ

今回は、マイクラJava版の構造物セットについて解説しました。

要点を整理すると、

  • structure_set は構造物の中身ではなく、配置ルール側のデータ
  • structures には生成候補になる構造物IDと weight を書く
  • placement で配置方式、生成間隔、saltなどを決める
  • 多くの構造物は minecraft:random_spread を使う
  • spacing は生成試行地点の平均間隔で、単位はチャンク
  • separation は生成試行地点同士の最小距離
  • weight は候補として選ばれる重みで、実際の出現数を保証するものではない
  • Java版1.21系では、試練の間は trial_chambers として構造物セットに定義されている

こんな感じです。

構造物セットは、最初に見るとJSONばかりで難しそうに見えます。

でも、実際に読んでみると、かなり役割がはっきりしています。

どの構造物を、どのくらいの間隔で、どの候補から生成するか。

まずはここだけ押さえれば大丈夫です。

自作データパックで構造物を自然生成させたい方は、まずバニラの villages.jsontrial_chambers.json を見て、同じ形で自分の構造物セットを作ってみると理解しやすいと思います。

では、本日はここまでで終わります。
最後までご覧いただき、ありがとうございました。
柚子クラでは他にもマイクラJava版の仕様解説・便利装置・データパック関連の記事をまとめているので、ぜひご覧くださいね(^^♪


12. 参考文献

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