0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

featureを作ろう ~ disk篇

Posted at

どんなfeature?

沼地や川底などに画像のように、粘土などが円形に広がっているのが見つかることがあります。これがdiskというtypeのfeatureです。
Clay_in_Swampland.png

このfeatureは指定された場所のブロックを条件に応じて円形に置換して生成されます。
バニラでは主に水中で見つかりますが、このfeature自体は水中である必要はなく、バニラでも氷樹バイオームのように、地上で見つかることもあります。

2024-02-03_09.43.17.png

JSONの書き方

JSONの構造は以下のようになっています。

{
    "target": Block predicate,
    "state_provider": {
        "fallback": Blockstates provider,
        "rules": [
            {
                "if_true": Block predicate,
                "then": Block state provider,
            ...
        ]
    },
    "radius": 整数/Int provider,
    "half_height": 整数/Int Provider
}

これは、指定した範囲(radiushalf_height)を特定条件下でブロックに置換する、というものになっています。

置換範囲

radiushalf_heightで指定することができます。
radiusは、円の半径で、横方向の置換範囲になります。生成地点を起点に、ここに指定した数値×2分、横方向に加算されます。0から8までの値がとれます。
half_heightはfeatureの厚さで、上下方向の置換範囲になります。生成地点を起点に、ここに指定した数値×2分、上下に加算されます。0から4までの値がとれます。

置換のしくみ

targetrulesfallbackで行います。
まず、targetで置換する場所の条件を指定します。
この中からrulesif_trueに合うものを上から照合し、置換されます。
ここに無かったもの、いわば「余り」の条件が全てfallbackとして返ってくるわけです。

targetとrules、fallbackの関係

条件および置換先の指定の仕方

Block predicateを用いて指定します。
Block predicateとBlock state providerについてはこちらをご覧ください。

確実にブロック置換するためには

さて、実際にやってみると結構fallbackが暴発しちゃったりして思わぬ場所が置換されてしまったりしがちです。
普通にfeatureとして使う場合はこれでもいいのですが、後述の応用のように特定のブロックだけ置換したい場合や、ストラクチャー内でブロックを補正する場合には確実に置換したいものです。
これを防ぐにはどうしたらいいでしょうか?

その答えとして、
targetの時点で条件を絞り込みましょう。
そして、その中からrulesを指定します。
こうすれば、「余り」にあたる部分がなくなり、fallbackが適用されなくなります。

言い換えたら、targetとrulesをほぼ一緒にする、という感じです。

応用:条件分岐でブロックを置換する

これを含めた「置換系」のfeatureはsimple_block等の「設置系」のfeatureとは違い、指定したブロックが置けないような状態(全部falseのヒカリゴケなど)でもお構いなく置け、ブロックアップデートを起こしません(「設置系」はブロックアップデートを起こすし、置けないものは置けません)。

更に、「どういうブロックをどのブロックに置換するか」の部分が配列になっており、上から順次試行していく、という流れになっています。

そのため、本来置けないブロックを強制的に設置できるほか、以下のようにブロックに応じて置換先を切り替えることができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?