こんばんは。Nakanishiです。
Discordサーバーを運営中です。
一緒にゆるく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")

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

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

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

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

そうすると画像のようにペールオークの木が生成されます。
もし葉が枯れるようであれば、それはタグ登録が上手くいってない可能性が高いです。
JavaでMinecraftのModを作ろう☆ 木材編⑪ 〜樹皮を剝いだ原木・木を作ろう〜 - NakanishiのForge1.20.1のJavaMod開発講座
上記の記事で原木を【logs.json】に入れてますので確認ください。
木が生成されない場合はresource内のフォルダ名のスペルミスの可能性が高いです。もう一度確認してみてください。
ここまでお疲れ様でした☆
もしこの記事が参考になった、または「JavaでMod制作を始めてみたい!」と思っていただけたら、ぜひ読者登録をお願いします。
それではまた次回お会いしましょう。
ここまでお読みいただき、ありがとうございました。
【次回記事】
JavaでMinecraftのModを作ろう☆ 木材編⑯ 〜レシピを追加しよう〜 - NakanishiのForge1.20.1のJavaMod開発講座