NakanishiのForge1.20.1のJavaMod開発講座

MoreCropsDelightの作者、NakanishiがMod制作について書いていきます。

JavaでMinecraftのModを作ろう☆ 木材編⑮ 〜苗木を成長させよう〜

こんばんは。Nakanishiです。

Discordサーバーを運営中です。

Kazushi_Nakanishiのこっそりサーバー

一緒にゆるくMod制作を楽しみませんか?
※)日本語での会話ができる方のみ参加可能です。
  条件に合わない方は参加をご遠慮ください。

 

 

前回のおさらい

苗木を作りました。

JavaでMinecraftのModを作ろう☆ 木材編⑭ 〜苗木を作ろう〜 - NakanishiのForge1.20.1のJavaMod開発講座

今回は、前回作った苗木からペールオークの原木が生成されるようにしたいと思います。

 

今回の目標

 

①成長を設定するJSONファイルを用意しよう

苗木から木を成長させる為にはJSONファイルを使用します。

場所は

resources/data/<modid>/worldgen/configured_feature/pale_oak.json

となります。

 

Configured Feature】とは木の形や構造(幹・葉・高さなど)を定義するファイルのことになります。

 

ここで誤字、脱字があると反映されないので注意してください。

 

pale_oak.json例)

src/main/{
  "type": "minecraft:tree",
  "config": {
    "trunk_provider": {
      "type": "minecraft:simple_state_provider",
      "state": {
        "Name": "nakanishi_mod:pale_oak_log"
      }
    },
    "trunk_placer": {
      "type": "minecraft:dark_oak_trunk_placer",
      "base_height": 6,
      "height_rand_a": 2,
      "height_rand_b": 1
    },
    "foliage_provider": {
      "type": "minecraft:simple_state_provider",
      "state": {
        "Name": "nakanishi_mod:pale_oak_leaves"
      }
    },
    "foliage_placer": {
      "type": "minecraft:dark_oak_foliage_placer",
      "radius": 0,
      "offset": 0
    },
    "dirt_provider": {
      "type": "minecraft:simple_state_provider",
      "state": {
        "Name": "minecraft:dirt"
      }
    },
    "minimum_size": {
      "type": "minecraft:two_layers_feature_size",
      "limit": 1,
      "lower_size": 0,
      "upper_size": 1
    },
    "decorators": [],
    "ignore_vines": true
  }
}

 

💡ポイント

・ペールオークの木はダークオークの木と同じ形をしているので、【type】で【dark_oak_trunk_placer】【dark_oak_foliage_placer】を参照しています。

・【trunk_placer】で木の大きさを設定します。【base_height】が最低限の高さ。【height_rand】が追加されるランダムの高さです。

・【ignore_vines】はツタを生やさないようにする設定です。

 

これをコピー&ペースト等をして書けたら、このJSONファイルを参照するCLASSファイルを作っていきます。

 

②TreeGrowerを設定するCLASSファイルを作ろう

新しい【worldgen】という名前の【Package】を作ってもらって、そこにCLASSファイルを作っていきます。

 

今回は名前を【PaleOakTreeGrower】にしました。

 

クラスですが、ペールオークの木はダークオーク同様2×2で育つので、【AbstractMegaTreeGrower】というクラスを使います。

例)

extends AbstractMegaTreeGrower

 

 

そうすると赤線が引かれますので、仮のパラメータと引数を表示させてあげます。

赤線の所で右クリックをしてもらってShow Context Actions】を選択します。

そうしたら【Implement methods】を選択してください。

 

そうすると、このような確認画面が出るので【OK】を押してください。

 

仮のメソッドを表示

ここで引数が【p_222904_】などとなっているので、直しておげます。

例)

@Override
    protected @Nullable ResourceKey<ConfiguredFeature<?, ?>> getConfiguredMegaFeature(RandomSource random) {
        return null;
    }

    @Override
    protected @Nullable ResourceKey<ConfiguredFeature<?, ?>> getConfiguredFeature(RandomSource random, boolean bees) {
        return null;
    }

 

仮の引数を修正

今回変更するのは【getConfiguredMegaFeature】だけなので、まずnullを消してもらって入力していきます。

例)

return ResourceKey.create(
                Registries.CONFIGURED_FEATURE,
                new ResourceLocation("nakanishi_mod", "pale_oak")
        );

 

💡ポイント

"nakanishi_mod"modid"pale_oak"は先ほど作ってもらったJSONファイル名です

 

ここでResourceLocationに赤線が引かれていますが、エラーではなく、将来的にこの構文が使えなくなるかもしれない。というIJ側の警告なので、この警告を消す文を最初に付けてあげます。

例)

@SuppressWarnings("removal")

完成したCLASSファイル

これで【PaleOakTreeGrower】は完成です。では、次に【Pale Oak Sapling】のCLASSファイルに移ってもらって、【PaleOakTreeGrower】を適応させます。

 

Block_Pale_Oak_SaplingのCLASSファイル

ここで【DarkOakTreeGrower】となっているのを【PaleOakTreeGrower】に変更します。

 

修正したCLASSファイル

では動作確認をしてみましょう。

 

苗木の設置

苗木を2×2で設置して骨粉を使います。

 

ペールオークの木が生成

そうすると画像のようにペールオークの木が生成されます。

 

もし葉が枯れるようであれば、それはタグ登録が上手くいってない可能性が高いです。

JavaでMinecraftのModを作ろう☆ 木材編⑪ 〜樹皮を剝いだ原木・木を作ろう〜 - NakanishiのForge1.20.1のJavaMod開発講座

上記の記事で原木を【logs.json】に入れてますので確認ください。

 

木が生成されない場合はresource内のフォルダ名のスペルミスの可能性が高いです。もう一度確認してみてください。

 

 

ここまでお疲れ様でした☆

 

もしこの記事が参考になった、または「JavaでMod制作を始めてみたい!」と思っていただけたら、ぜひ読者登録をお願いします。
それではまた次回お会いしましょう。
ここまでお読みいただき、ありがとうございました。

 

次回記事

JavaでMinecraftのModを作ろう☆ 木材編⑯ 〜レシピを追加しよう〜 - NakanishiのForge1.20.1のJavaMod開発講座