複数のフィーチャーを同時に扱いたい時はaggregate_featureとsequence_featureが便利です。
この二つは設定した複数のフィーチャーをすべて設置するといったことができます。
基本的にどちらも同じような機能ですが、違うところもあります。
解説内の表記について
解説内で出てくる丸括弧はデータを表しています。つまり各々で変える部分。例は下記の通り
(String)
⇒"abcdef"
,"Hello World"
(Integer)
⇒123456
,1024
(Float)
⇒0.625
,10000000000.0
(Value)
⇒0.625
,10000000000.0
(Bool)
⇒true
,false
(Object)
⇒{"data": (Integer), ... , "data_256": (String)}
(Molang)
⇒"variable.size = math.sin((query.ground_speed/30)*360);"
(*****+)
とは通常の(Integer)
,(Value)
などの使い方に加え、設定した範囲内でランダムな値も使えるということです。{"min": (Integer),"max": (Integer)}
のようにすると、ランダムな値を設定できます。
(List ****)
はそれぞれの配列型を示します。例:["egg","chicken"]
(***/***)
は複数の型に対応してます。
Aggregate featureとSequence featureとは
冒頭でも説明したとおり、複数のフィーチャーを設置することができるフィーチャー(フィーチャーコントロール)です。
ただ単に複数のフィーチャーを適当に設置するだけであればaggregate_featureとsequence_featureどちらを使おうが問題はありません。
ですが、本題はここから。aggregate_featureとsequence_featureのそれぞれの特徴についてお話します。
Aggregate featureの特徴
先ほどもいった通り、複数のフィーチャーを設置しますが、その際の設置順序が任意になっています。
リストの上から順にとかではないわけです。
そしてもう一つの特徴として、設置の中止をすることができるようになっています。
最初のフィーチャーの設置に失敗・成功した場合、残りのフィーチャーを設置しないといったことをします。
Sequence featureの特徴
対してこちらは複数のフィーチャーを設置する際、リストの上から順に設置されていきます。
その設置される基準となる座標が一つ前に設置したフィーチャーの最後のブロック位置になります。
難しいと思うので、具体的に。フィーチャーA,BがあったとしてSequence featureでふたつを設置しようとすると、最初はフィーチャーがトリガされた座標を原点として1つ目のフィーチャーAを設置します。その次に設置するフィーチャーBはフィーチャーAが設置した最後のブロックの座標を原点にする。ということになります。
そんな感じの機能なんですが、Single blockやStructureでは座標が変わらないので使いどころが限られています。現状原点が変わるのはTree featureやSearch Featureなど僅かです
ほかのフィーチャについては下のリンクを参照して下さい↓
Aggregate featureのサンプル
サンプルというか記述例ですが、ここに乗せておきます。
ファイル構造はこんな感じ
-
feature_rules
- toka7290:testfeaturerule.json
-
features
- testfeature_control_aggregate.json
- testfeature_control_search.json
- testfeature_control_weighted_random.json
- testfeature_structure.json
- testfeature_tree.json
- manifest.json
- pack_icon.png
なんかいろいろありますが、フィーチャーコントロールは単体で使うことはできないので、これが基本的なフィーチャーの使い方になります。
Sequence featureのサンプル
さっきよりもシンプルにしてみます。
ファイル構造はこんな感じ
-
feature_rules
- toka7290:testfeaturerule.json
-
features
- testfeature_control_search.json
- testfeature_control_sequence.json
- testfeature_singleblock.json
- testfeature_singleblock_2.json
- manifest.json
- pack_icon.png
実際に見てみるとこんな感じ↓
Search featureの始点が一番手前下で、x,z,yの順番に14個ブロックを置くようになっています。
最後の14個目の座標が次のフィーチャーの基準点になるので14個目のブロックは他のフィーチャー(この場合レンガブロック)に置き換わっています。
Aggregate featureの解説
Aggregate featureの構造はかなり単純です。
-
"format_version": (String)
- このfeatureが作成されたバージョン。必須
"1.13.0"
が最低バージョン-
"description": (Object)
- このfeatureの情報設定。現状はIDの設定のみ。
-
-
"identifier": (String)
- このfeatureのID。必須
名前空間:ID
の形式で書く。名前空間はアドオン(パック)の名前。- IDとファイル名は一緒でなければダメ。
-
-
"features": (List String)
- 設置するフィーチャーを設定します。必須
- ID名を記述します。1つ以上無ければエラー
- 設置するフィーチャーは順番によらずランダムで、基準の設置座標は固定です。
-
"early_out": (String)
- 設置の中断方法について設定します。
- 最初のフィーチャーの設置が成功/失敗した場合、設定されている他のフィーチャーを設置せずに終了します。
- 扱える値は以下のとおり
-
値 説明 none
中断を行いません。デフォルト first_success
最初のフィーチャーの設置が成功した場合、終了します。 first_failure
最初のフィーチャーの設置が失敗した場合、終了します。
Sequence featureの解説
Sequence featureはフィーチャーの中でも最も単純な構造を持つフィーチャーです。
-
"format_version": (String)
- このfeatureが作成されたバージョン。必須
"1.13.0"
が最低バージョン-
"description": (Object)
- このfeatureの情報設定。現状はIDの設定のみ。
-
-
"identifier": (String)
- このfeatureのID。必須
名前空間:ID
の形式で書く。名前空間はアドオン(パック)の名前。- IDとファイル名は一緒でなければダメ。
-
-
"features": (List String)
- 設置するフィーチャーを設定します。必須
- ID名を記述します。1つ以上無ければエラー
- 設置するフィーチャーはリストの上から順に設置され、一つ前に設置したフィーチャーが最後に作業を行った座標です。