カスタムディメンジョン ~ ディメンジョンをつくる
はじめに
この記事では、カスタムディメンジョンの一つとして、ディメンジョンを作っていきます。例によって、経験によるものであり、ソースコードを覗いたりはしていないので、理解できていないことがまだあります。間違っている箇所もあるかもしれません。そのときは、遠慮なくコメントかTwitter(@noir_kokumin)にご指摘ください。
作るファイル
ここで作っていくファイルを紹介します。他のカスタムディメンジョン要素と違ってworldgenフォルダじゃないので、注意してください。
dimension/(ディメンジョン名).json
dimension_type/(ディメンジョン設定名).json
ディメンジョンをつくる
それでは早速、ディメンジョンを作っていきます。
基本構造はこちら。
{
"type": dimension_type,
"generator": {
"type": generator_type,
"settings": 諸々の設定(noise、flatのみ)
}
}
type
dimension_typeフォルダから指定します。
これはディメンションの基本設定になります。
dimension_type
上記の通り、ディメンションのタイプであり、その性質を表します。
以下の項目が設定できます。
ultrawarm
ブール型(true/falseのやつ)で、ネザーのような環境にします。即ち、trueにすると水が蒸発し、スポンジが置くだけで乾くようになり、溶岩が速く流れるようになります。
natural
これも、ブール型で、falseにすると、コンパスがぐるぐるしたり、ベッドで寝れなくなります(爆発するのはまた別の設定)。また、trueにしたら、ネザーポータルからゾンビピグリンがスポーンするようになります。
cordinate_scale
Float型(小数)
ディメンションを出たときに座標補正をかけます。
ネザーからオーバーワールドに出たら座標が8倍になりますよね。アレです。
has_skylight
ブール型
trueにすると明るくなります。
has_ceiling
Wiki(https://minecraft.fandom.com/wiki/Custom_dimension#Dimension_type)によると、岩盤の天井を生成するかどうか、らしいのですが、天井は地形の生成の一環で、その一番上がSurface Ruleで岩盤に置き換わるので、これが関わってるかどうかは解りません。
ambient_light
fixed_time
ブール型あるいはint型(整数)
省略可能で、時間を指定した値に固定します。指定する値は/time setする時のやつです。
piglin_safe
ブール型で、falseにするとピグリンがゾンビ化します。
bed_works
ブール型
falseにすると、ベッドが右クリックで爆発します。
respawn_anchor_works
falseにするとリスポーンアンカーが右クリックで爆発します。
has_raids
trueにすると、不吉な予感で襲撃が発生します。
min_y
地形の限界深度で、これより下に地形が生成されません。-2048まで設定できます。
height
地形が生成される高さです。0~4064以内の16の倍数で指定する必要があります。これ+min_y が最大の高さとなります。
logical_height
コーラスフルーツとかネザーポータルとかでプレイヤーが転移できる高さで、heightより小さくする必要があります。
infiniburn
ブロックタグを指定します。ここに指定されたブロックに火を点けると永遠に燃え続けます。例として、ネザーラックやエンドでの岩盤があります。
地味に、1.18.2から頭に#をつける必要があるので注意。
effects
空の見た目です。minecraft:overworld、minecraft:the_nether、minecraft:the_endのどれかです。以下のようになります。
・minecraft:overworld:オーバーワールドの空。青空や星空が見える。
・minecraft:the_nether:ネザーの空。真っ赤。
・minecraft:the_end:エンドの空。ちょっとノイジーな虚無虚無しい空
monster_spawn_light_level
monster_spawn_block_light_limit
1.19で追加された項目です。
モンスターがスポーンする明るさを設定できます。
0から15までの値が設定でき、この値以下の場所でモンスターがスポーンします。
generator
ここから、地形やバイオーム等の設定を行います。
type
設定のタイプで、minecraft:flat、minecraft:debug、minecraft:noiseがあります。debugはデバッグワールド風のワールドになり、全てのブロックが空中に1マス間隔で格子状に並びます。但し、デバッグワールドと違い、普通にモブはスポーンするし、昼夜サイクルはあるし、ブロックを破壊しても再生されません(あくまでデバッグワールド風です)。
type:minecraft:flat
スーパーフラットのようなワールドになります。建築等の作業用等に便利です。
settingsには以下の項目を設定します。
layers
スーパーフラットで使うブロックの設定です。blockでどのブロック、heightで何ブロック分の高さ生成するかを決めます。
biome
バイオームを1つだけ指定します。
lakes
features
true/falseで指定します。池やFeature(木などの装飾)を入れるかどうか。
type:minecraft:noise
先程まではデバッグワールド風とかスーパーフラット等の特殊なワールドでしたが、ここからは一般的な?ワールドです。そしてこれが本当に難しい。私自身分かってないものが少なからずありますが、そこはご容赦ください。
settings
ノイズ設定(noise_settings)を指定します。まあ、直接書き込むこともできますが、テキスト量が膨大なので、別に作っておいて、それを指定すればいいです。
biome_source
バイオームの生成方法です。以下のものがあります。
・minecraft:fixed :1つだけ生成します。
・minecraft:checkerboard :複数のバイオームを格子状に並べます。biomes[]で生成するバイオーム、scaleでその大きさを決めます。
・minecraft:the_end :エンドの生成パターンです。つまり、中央に大きな島があり、その外部に小さな島々ができます。ハードコードされてるので使う意味はないです。
・minecraft:multi_noise:temperature、humidity、continentalness、erosion、weirdness、depthのノイズに基づいてバイオームを生成します。オーバーワールドやネザーで使われています。jsonに書き込まれている為、自作バイオームの追加や既存のバイオームのパターンを変更することができます。その為、比較的自由度が高いのですがその分扱いが難しいです。
Multi noiseでバイオームを配置する
基本構造
まず、基本構造をあげていきます。multi_noiseの場合、biome_sourceの中身はこうなります。
{
"type": "minecraft:multi_noise",
"biomes": [
{
"biome": バイオームのID,
"parameters": {
"temperature": 小数1つ/配列,
"humidity": 同上,
"continentalness": 同上,
"erosion": 同上,
"weirdness": 同上,
"depth": 同上,
"offset": 小数1つ
}
},
...
]
}
…なんか設定項目多そうでめんどくさそうですね(´・ω・`)
それでは、1つ1つ見ていきましょう。
パラメータの指定のしかた
offset以外の各パラメータには小数を1つか、配列で指定します。配列で指定した場合、[最小値、最大値]となります。offsetだけは小数1つしか指定できません。例えば、キノコ島の設定を見てみると
{
"parameters": {
"erosion": [
-1.0,
1.0
],
"depth": 0.0,
"weirdness": [
-1.0,
1.0
],
"offset": 0.0,
"temperature": [
-1.0,
1.0
],
"humidity": [
-1.0,
1.0
],
"continentalness": [
-1.2,
-1.05
]
},
"biome": "minecraft:mushroom_fields"
}
この場合、continentalnessが-1.2から-1.05の場所に生成される、ということになります。他の値はどうでもいいので、-1.0から1.0の場所が指定されていますね。
これらのパラメータの数値の組み合わせに最も近い所にバイオームが配置されます。
各パラメータの意味
multi_noiseでは、上記の通り、6つのパラメータの組み合わせによって、バイオームが配置されます。
各パラメータは-2 ~ 2までの値が取れますが、±1.0を超えることなんて滅多になく、超えても精々±1.2ぐらいまでなので、-1.2 ~ 1.2 と思ってください。
また、各パラメータの値はデバッグ画面から見ることができます。それを確認したり、後述するBiome builderや別添の表を見ながら配置するとよいでしょう。
temperature
「気温」を表します。降水やバイオームカラーを決めるやつとは別です。暖かそうなバイオームは高くしておくといいでしょう。
…実際は、バイオームの配置にしか使われていないパラメータなので、好きなようにやったらいいと思います。
humidity
「湿度」を表しますが、これもバイオームの配置にしか使われていません。temperature同様、好きなように扱ってください。(実際、デフォルトの砂漠はこれの数値が高い所にも生成されてる)
continentalness
「内陸性」を表し、これの数値が高いと陸、低いと海を表します。
このパラメータはバイオームの配置だけでなく、地形生成にも使用されており、後述のBiome builderに対応しています。地形も意識して配置しましょう。
erosion
「侵食」という意味の英単語ですが、ここでは「平坦度」と理解していいと思います。
これの数値が低いと起伏が激しくなり、高いと平坦な地形を表します。
バイオームの配置だけでなく、地形生成にも関わっており、後述のBiome builderに対応しています。地形も意識して配置しましょう。
weirdness
後述するBiome builderのPV(Peaks and Valley)に対応しており、山(Peak)か高地(High)、中間の高さ(Mid)、低地(Low)、谷(Valley)のどれであるかを表しています。
図に表すとこんな感じ。山をイメージしてみるといいかもしれません。(どの値がどこに対応してるのかは、別添の表を参照されたし)
depth
これだけY軸方向で変化し、地下バイオームの生成に関わります。
地表面を0として下に向かって増えていきます。地上に生成させたいバイオームなら0、地下に生成させたいバイオームで0以上の値を指定することで、2層構造を取らせることができるわけです。更に、指定してやれば、バイオームの層を増やせます。
勿論マイナスを指定することもでき、その場合、上に生成されます。
offset
バイオームの生成されにくさを表します。
生成されなかった場合、他のバイオームの中から、条件に一番近そうなものが配置されます。計算が狂うので、基本的に0でいいと思います。
レアバイオームが演出したかったら、あまりとらないであろう値を指定すればいいのです。たとえば、キノコ島なんて、continentalnesが-1.2 ~ -1.02と指定されています。
Biome builder
先程のスクリーンショットでBiome builderと書いてある部分がありました。ここを見てみると、
PV:Valley C:Coast E:1 T:4 H:4
と書いてあります。
これはそれぞれ、
PV=Peaks and Valley
C=Continentalness index
E=Erosion index
T=Temperature index
H=Humidity index
を表しています。
それぞれの意味
PV
PVは今いる地形が山頂か谷か、高地か低地か、その中間かを表しており、WeirdnessおよびNoiseRouter欄のPVに対応しています。
$$
-3.0 × ( | |Weirdnessの値| - 0.6666666666666666 | - 0.3333333333333333 )
$$
で算出されており、大体別添の表のように対応しています。
丁度Valleyで-1.0に、Peaksで1.0になるんですよね。よくできてます。
Continentalness/Erosion/Humidity index
Continentalness、Erosion、Humidityは一定の値ごとにグループ化されており、そのグループ番号を表しています。
これらの値がどのように変動しているかは別添の表を参照。
別添
Biome builderのざっくりとした対応表です。
バイオームを配置するときにこれらの表を参考にしてください。
Weirdness
Continentalness, Erosion
最新バージョンにおける注意点
最後に、最新バージョンにおける注意点を少々。
最新版では、デフォルトのカスタムディメンジョン内にdimensionフォルダが存在しません。その代わり、world_presetというフォルダが追加されており、そこに全ディメンション一括で書くと、という形になっています。
幸い、dimensionフォルダは普通に機能するため、問題はないのですが、デフォルトの設定が見づらくなってしまいました。
もし、デフォルトの設定が見たければ、misode氏のDatapack generatorのdimensionにアクセスしましょう。presetsから見たいディメンジョンを選ぶことでその構成を見ることができます。
あとがき
いかがだったでしょうか。
今回は、ほとんどmulti_noise関係になってしまい、難解な内容だったかと思います。私自身も理解しきってない部分があることもあり、分かりにくかったかもしれません。それでも、少しでも理解を深めることができれば、幸いです。