NakanishiのForge1.20.1のJavaMod開発講座

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

JavaでMinecraftのModを作ろう☆ 農業編③ 〜SeedItem(アイテム)のCLASSファイルを作ろう〜

こんばんは。Nakanishiです。

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

Kazushi_Nakanishiのこっそりサーバー

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

 

 

前回のおさらい

CropBlockブロック)のCLASSファイルを完成させました。

JavaでMinecraftのModを作ろう☆ 農業編② 〜CropBlock(ブロック)のCLASSファイルを作ろう〜 - NakanishiのForge1.20.1のJavaMod開発講座

今回はSeedItemアイテム)のCLASSファイルを作っていこうと思います。

 

 

①CLASSファイルを編集しよう

JavaでMinecraftのModを作ろう☆ 食料編① 〜フードプロパティを追加しよう〜 - NakanishiのForge1.20.1のJavaMod開発講座

編集するアイテムは上記の記事で作った【Prismarine Carrot】を編集します。

 

Prismarine CarrotのCLASSファイル

この状態では植えれるアイテムになっていない為、【Item】を変更する必要があります。

基本、作物には【ItemNameBlockItem】というものを使います。

これは名前をブロック側から持ってくるというクラスになります。

ですが、JadeWTHITに安定して対応させるためには、今まで通り両方の翻訳を用意しておくと安心です。

 

それでは変更をしていきましょう。

例)

extends ItemNameBlockItem

 

変更することで赤線が引かれますが、これは対応するブロックを指定していないだけなので、安心してください。

 

ここで

public Item_Prismarine_Carrot() {
        super(new Item.Properties()
                .food(NakanishiModFoods.PRISMARINE_CARROT)
        );
    }
ごと消して、仮のパラメータと引数を表示し直す方法もありますが、今回は追記の方法を紹介します。

 

例)

super(NakanishiModBlocks.Blocks.PRISMARINE_CARROTS.get(),
                new Item.Properties()
                .food(NakanishiModFoods.PRISMARINE_CARROT)
        );

 

完成したPrismarine CarrotのCLASSファイル

これで【Prismarine Carrot】が耕地に植えれるアイテムになりました。

 

💡補足

実は【ItemNameBlockItem】は【BlockItem】同様、CLASSファイルを制作しなくても登録する方法があります。実際に【Farmer’s Delight】等では、アイテムのCLASSファイルを用意していません。

ただし、この方法だとアイテムに細かい設定(特殊な挙動やカスタムプロパティなど)を入れられなくなります。
そのため、記事ではCLASSファイルを作成する方法を紹介しています。個人的にもこちらをおすすめします。

 

 

これで完成といきたいのですが、まだ設定をしないといけない事があります。

 

Prismarine Carrotを植えたところ

テクスチャの余白の部分が黒く塗りつぶされています。

これはレイヤーの透過処理を設定していない為に起きている現象です。

 

なので今からレイヤーを設定するCLASSファイルを作っていきます。

 

②レイヤーを設定するCLASSファイルを作ろう

任意ですが、【client】の【Package】を作って管理しておくと管理が楽になります。

 

CLASSファイル名は【ClientSetup】にしました。

 

 

まず、public class ClientSetupの前に以下の文を入力します。

例)

@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)

 

 

次にpublic class ClientSetup内に以下の文を入力します。

例)

@SubscribeEvent

 

これでimport文import net.minecraftforge.eventbus.api.SubscribeEvent;が追加されていることを確認してください。

 

これだけだと@SubscribeEventに赤線が引かれているので、以下の文を追記します。

例)

public static void onClientSetup(FMLClientSetupEvent event){}

これで赤線が全て消えます。ここから【Prismarine Carrots】を登録していきます。
例)

ItemBlockRenderTypes.setRenderLayer(NakanishiModBlocks.Blocks.PRISMARINE_CARROTS.get(),
                RenderType.cutout());

 

これで登録は完了なのですが、setRenderLayerに赤線が引かれてしまっています。

これはこの構文が近いうちに使えなくなるかもしれないよ。という警告の赤線なので、エラーとは違います。バージョンアップの際に違う書き方をしなきゃいけないかもしれない。というだけで、現段階では問題はありません

 

ですが、毎回警告が出るのは鬱陶しいので、その警告を打ち消す文を入力します。

@Modの前の行に以下の文を入力してください。

例)

@SuppressWarnings({ "unchecked", "removal" })

これで警告が打ち消されるので、毎回警告が出る事がなくなります。

 

それでは、もう1度動作確認をしてみましょう。

 

cutoutが適応されたPrismarine Carrots

これで透過処理が通り黒塗りの部分がなくなりました。

ただ、この段階ではまだ何もドロップしないので、次回の記事で【loot_table】の設定をして収穫が無事に出来るか成長するかを確認していこうと思います。

 

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

 

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

 

次回記事

JavaでMinecraftのModを作ろう☆ 農業編④ 〜農作物(ニンジン)を完成させよう〜 - NakanishiのForge1.20.1のJavaMod開発講座